最近在学win32的多线程,感觉很好玩。
还是比较喜欢C语言的简洁,我总觉得MFC干扰的要素太多了,让人不能集中精力做核心代码,花在做界面上的时间太多。
这个程序是用C语言写的,用了win32提供的多线程做。虽然整个程序可以完全不用多线程也能实现,但是作为练习写一写感觉还是蛮好~
记得上次做龟兔赛跑的时候完全没有用win32函数,为了实现延时(delay),调用了时间函数计时,然后不停的空循环……现在想想真是愚蠢,用win32的Sleep就行了,而且不会占用CPU资源。
![](https://p-blog.csdn.net/images/p_blog_csdn_net/tiaotiaoyly/Snap1.gif)
---------
代码:
#include
<
stdio.h
>
#include
<
windows.h
>
#include
<
stdlib.h
>
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
#define
MAX_PLATE 10
#define
PLAYDELAY 400
#define
LOOPDELAY 200
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
int
tower[
3
][MAX_PLATE];
int
top[
3
];
bool
GameOver;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
//
init towers
void
init(
int
n)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
top[1]=top[2]=0;
top[0]=n;
for(int i=0;i<n;i++)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
tower[0][i]=n-i;
tower[1][i]=tower[2][i]=0;
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
void
printChar(
int
w,
int
ch)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
for(int i=0;i<w;i++) printf("%c",ch);
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
void
printPlate(
int
width,
int
size)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
if(size==0)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
printChar(width/2,' ');
printf("|");
printChar(width/2,' ');
}
else
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
printChar(width/2-size/2,' ');
printChar(size,'#');
printChar(width/2-size/2,' ');
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
//
Draw towers
void
draw(
int
n)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
int width=n*2-1;
system("cls");
for(int j=n-1;j>=0;j--)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
for(int i=0;i<3;i++)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if(top[i]<=j) printPlate(width,0);
else printPlate(width,tower[i][j]*2-1);
printf(" ");
}
printf(" ");
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
void
move(
int
a,
int
b)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
tower[b][top[b]++]=tower[a][--top[a]];
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
void
Hanoi(
int
n,
int
a,
int
b,
int
c)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
if(n)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
Hanoi(n-1,a,c,b);
move(a,c);
Sleep(PLAYDELAY);
Hanoi(n-1,b,a,c);
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
//
MultThread Function
void
play(
int
n)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
init(n);
GameOver=false;
Hanoi(n,0,1,2);
GameOver=true;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
int
_tmain(
int
argc, _TCHAR
*
argv[])
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
int n=6; //number of plates
//new Thread
HANDLE hThread;
DWORD ThreadID;
hThread = CreateThread(NULL,0,
(LPTHREAD_START_ROUTINE)play, //Pointer of ThreadFunc
(VOID*)n, //Argument to ThreadFunc
0,&ThreadID);
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
//game loop
while(!GameOver)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
draw(n);
Sleep(LOOPDELAY);
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
//system("pause");
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)