我认为兴趣之于学习尤为重要的!个人对于用程序编写游戏总是很羡慕,这个可能是因为我是学习C++的用的是Microsoft Visual C++ 6.0来编程的。这个编程工具是比较好用的,但是有一个缺点就是图形化的东西都不能运行(如识别不了头文件<graphics.h>).别说是游戏了,就是一些简单的图像显示都不能。当然编写算法等还是很方便,也很好用。对此我是比较遗憾的,因为我在做C经典一百题中就有一些是图形的东西结果无法显示。所以我想到了再下载一个编译器。最终我选择了TC编译器。刚开始不会用的,因为都不知道要设置头文件的路径等。后来终于明白了TC的简单用法,然后用它来实现了C经典百题中关于图形的题。看着那些图形,感觉就是比较爽。有了这个工具我就想了却我的一个心愿——编写一个小游戏。但是这确实不是我现在能写的出来的。所以到图书管借了本关于编写游戏的书。今天终于写出了我的第一个小游戏——贪吃蛇游戏。呵呵,在游戏中加了我的名字进去。看着这个游戏,虽然他不是我想的,虽然我现在都不是很理解这个程序,但是还是很开心的。而且,对于编程我也更加的感兴趣了。
一下是游戏的代码,有兴趣的可以在TC上运行一下:
- #define N 200
- #include <graphics.h>
- #include <stdlib.h>
- #include <dos.h>
- #define LEFT 0x4b00
- #define RIGHT 0x4d00
- #define DOWN 0x5000
- #define UP 0x4800
- #define Esc 0x011b
- int i,key;
- int score=0;
- int gamespeed=50000;
- struct Food
- {
- int x;
- int y;
- int yes;
- }food;
- struct Snake
- {
- int x[N];
- int y[N];
- int node;
- int direction;
- int life;
- }snake;
- void Init(void);
- void Close(void);
- void Drawk(void);
- void GameOver(void);
- void GamePlay(void);
- void PrScore(void);
- void main(void)
- {
- Init();
- Drawk();
- GamePlay();
- Close();
- }
- void Init(void)
- {
- int gd=DETECT,gm;
- initgraph (&gd,&gm,"d://tc"); /*zlknywt*/
- cleardevice();
- }
- void Drawk(void)
- {
- setbkcolor(LIGHTGREEN);
- setcolor(11);
- setlinestyle(SOLID_LINE,0,THICK_WIDTH);
- for(i=50;i<=600;i+=10)
- {
- rectangle(i,40,i+10,49);
- rectangle(i,451,i+10,460);
- }
- for(i=40;i<=450;i+=10)
- {
- rectangle(50,i,59,i+10);
- rectangle(601,i,610,i+10);
- }
- }
- void GamePlay(void)
- {
- randomize();
- food.yes=1;
- snake.life=0;
- snake.direction=1;
- snake.x[0]=100;
- snake.y[0]=100;
- snake.x[1]=110;
- snake.y[1]=100;
- snake.node=2;
- PrScore();
- while(1)
- {
- while(!kbhit())
- {
- if(food.yes==1)
- {
- food.x=rand()%400+60;
- food.y=rand()%350+60;
- while(food.x%10!=0)
- food.x++;
- while(food.y%10!=0)
- food.y++;
- food.yes=0;
- }
- if(food.yes==0)
- {
- setcolor(GREEN);
- rectangle(food.x,food.y,food.x+10,food.y-10);
- }
- for(i=snake.node-1;i>0;i--)
- {
- snake.x[i]=snake.x[i-1];
- snake.y[i]=snake.y[i-1];
- }
- switch(snake.direction)
- {
- case 1:
- snake.x[0]+=10;break;
- case 2:
- snake.x[0]-=10;break;
- case 3:
- snake.y[0]-=10;break;
- case 4:
- snake.y[0]+=10;break;
- }
- for(i=3;i<snake.node;i++)
- {
- if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0])
- {
- GameOver();
- snake.life=1;
- break;
- }
- }
- if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||snake.y[0]>455)
- {
- GameOver();
- snake.life=1;
- }
- if(snake.life==1)
- break;
- if(snake.x[0]==food.x&&snake.y[0]==food.y)
- {
- setcolor(0);
- rectangle(food.x,food.y,food.x+10,food.y-10);
- snake.x[snake.node]=-20;
- snake.y[snake.node]=-20;
- snake.node++;
- food.yes=1;
- score+=10;
- PrScore();
- }
- setcolor(4);
- for(i=0;i<snake.node;i++)
- rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]-10);
- delay(gamespeed);
- setcolor(0);
- rectangle(snake.x[snake.node-1],snake.y[snake.node-1],snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);
- }
- if(snake.life==1)
- break;
- key=bioskey(0);
- if(key==Esc)
- break;
- else if(key==UP&&snake.direction!=4)
- snake.direction=3;
- else if(key==RIGHT&&snake.direction!=2)
- snake.direction=1;
- else if(key==LEFT&&snake.direction!=1)
- snake.direction=2;
- else if(key==DOWN&&snake.direction!=3)
- snake.direction=4;
- }/*endwhile(1)*/
- }
- void GameOver(void)
- {
- cleardevice();
- PrScore();
- setcolor(RED);
- settextstyle(0,0,4);
- outtextxy(200,200,"GAME OVER");
- getch();
- /* clrscr();
- cleardevice();
- setcolor(RED);
- settextstyle(0,0,4);
- outtextxy(200,200,"AWEN MAKE");
- */
- }
- void PrScore(void)
- {
- char str[10];
- setfillstyle(SOLID_FILL,YELLOW);
- bar(50,15,220,35);
- setcolor(6);
- settextstyle(0,0,2);
- sprintf(str,"score:%d",score);
- outtextxy(55,20,str);
- }
- void Close(void)
- {
- getch();
- closegraph();
- }
敲这段代码,只是因为个人兴趣而已。再次声明这段代码不是我设计的,呵呵。但是也很满足了。希望想学习的朋友都能从学习中找到快乐。