用C语言编程汉诺塔游戏需要图形
使用
crt
类型
a3 =数组[1..3]的字节;
定义变量
n:字节;
Col,Flag:a3;
(*在(x,y) *上打印一个大小为n的磁盘)
程序盘(x,y,n:字节);
定义变量
I:字节;
开始
对于i:=0到n do
开始
gotoxy(x+i,y);写('?);
gotoxy(x-i,y);写('?);
gotoxy(80,25);
结束;
结束;
(*移动磁盘时的声音程序*)
程序唱;
定义变量
I,freq:整数;
开始
随机化;
对于i:=1到10做
开始
freq:= Random(2900)+100;
声音(频率);延时(20000);
无声音;
结束;
结束;
(*在(x,y) *上清除磁盘大小为n)
Procedure ClrDisk(x,y,n:byte);
定义变量
I:字节;
开始
做某事
开始
gotoxy(x+i,y);写(');
gotoxy(x-i,y);写(');
结束;
结束;
(*启动程序*)
程序启动;
定义变量
I:字节;
开始
clrscr
重复{输入n }
gotoxy(5,5);
写('输入汉皇大厦的层数
ClrEol读作(n);
直到(0 & ltn)和(n & lt12);
clrscr{版本信息}
gotoxy(28,1);
写(' ** ',n '--河内问题* * ');
gotoxy(37,2);
写(' 1992.10 W . y . z ');
对于i:=8到19做{三个指针}
开始
gotoxy(15,I);写('?);
gotoxy(40,I);写('?);
gotoxy(65,I);写('?);
结束;
对于i:=1到80做{下}
开始
gotoxy(i,20);写('?);
结束;
{打印A、B、C }
gotoxy(15,21);写(' A ');
gotoxy(40,21);写(' B ');
gotoxy(65,21);写(' C ');
for i:=n downto 1 do {n disks }
磁盘(15,19-n+i,I-1);
{初始化数组列[3],标志[3] }
col[1]:= 15;col[2]:= 40;col[3]:= 65;
flag[1]:= n+1;flag[2]:= 1;flag[3]:= 1;
{一些信息}
gotoxy(5,24);
写('按空格键开始...');
重复直到ReadKey & lt& gt'';
gotoxy(5,24);ClrEol
gotoxy(5,24);ClrEol
写('按任意键断开。');
结束;
(*将磁盘从移到too *)
过程Move(m,from,too:byte);
定义变量
x1,y1,x2,y2,n,步长:字节;
开始
x 1:= Col[from];y 1:= 20-Flag[from]+1;
x2:= Col[too];y2:=20-Flag【太】;
step:= too-from;n:= m-1;
重复{向上}
ClrDisk(x1,y1,n);
如果y 1 & gt;=8然后开始gotoxy(x1,y 1);写('?);结束;
dec(y 1);
磁盘(x1,y1,n);延时(10000);
直到y 1 = 5;
dec(Flag[from]);
重复{ shift }
ClrDisk(x1,5,n);
inc(x1,step);
磁盘(x1,5,n);延时(10000);
直到x 1 = x2;
重复{向下}
ClrDisk(x2,y1,n);
如果y 1 & gt;=8然后开始gotoxy(x1,y 1);写('?);结束;
Inc(y 1);
盘(x2,y1,n);延时(10000);
直到y 1 = y2;
Inc(Flag[too]);
(*唱;*)
如果按键,则暂停(0);
结束;
(* n河内问题*)
过程N_Hanoi(n,a,b,c:byte);
开始
如果n=1,则移动(1,a,c)
否则开始
N_Hanoi(n-1,a,c,b);
Move(n,a,c);
N_Hanoi(n-1,b,a,c);
结束;
结束;
(*打印该程序的结束信息*)
程序最终;
开始
gotoxy(5,24);ClrEol
写('我已经移动了所有磁盘!');
gotoxy(5,25);
写('按空格键结束。');
重复直到ReadKey & lt& gt'';
结束;
开始
发起;
n _河内(n,1,2,3);
决赛;
结束。