用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);

决赛;

结束。