c语言小游戏贪吃神,[原创]自己编的一个贪吃蛇小游戏
#include
#include
#include
#include /*調(diào)用randomize()函數(shù)*/
#include
#define SPACE 0X3920
#define ESC 0x011b
#define UP 0x4800
#define DOWN 0x5000
#define LEFT 0x4b00
#define RIGHT 0x4d00
typedef struct
{
int x;
int y;
}point;
DrawBody(int x, int y)
{
gotoxy(x, y);
printf("%c\b", 3);
}
DrawHead(int x, int y)
{
gotoxy(x, y);
printf("%c\b", 2);
}
DrawSpace(int x, int y)
{
gotoxy(x, y);
printf(" ");
}
void bring_food(point man[],int n,point *food) /*隨機產(chǎn)生食物*/
{
int x,y;
int i,k = 0;
randomize();
while (k == 0)
{k = 1;
x = rand() % 58;
y = rand() % 23;
if (x < 3 || y < 3) /*產(chǎn)生的食物不在框內(nèi)*/
{k = 0;
continue;
}
for (i = 0; i < n; ++i)
if ((x == man[i].x) && (y == man[i].y)) /*如果產(chǎn)生的食物坐標和蛇身的某個坐標相同,則不符合條件*/
{ k = 0;
break;
}
}
food->x = x;
food->y = y;
gotoxy(x,y); /*在x,y出產(chǎn)生食物*/
printf("*");
}
void DrawWall() /*畫邊框函數(shù)*/
{ int i,j;
for (j = 2, i = 2; i < 60; ++i)
{ gotoxy(i, j);
textcolor(GREEN);
putch(219);
gotoxy(i, j+22);
textcolor(GREEN);
putch(219);
}
for (j = 2, i = 2; i < 25; ++i)
{ gotoxy(j, i);
textcolor(GREEN);
putch(219);
gotoxy(j+57, i);
textcolor(GREEN);
putch(219);
}
}
void message(int score) /*該函數(shù)輸出信息*/
{
if (score == 10 || score == 20 || score == 35)
{
gotoxy(65,6);
printf("Score: %d",score);
gotoxy(20,10);
textattr(5);
cprintf(" You Win ");
gotoxy(20,12);
cprintf("Thank you baby!");
getch();
return ;
}
gotoxy(65,6);
printf("Score: %d",score);
gotoxy(65,7);
printf("Space: pause");
}
int main() /*該程序運行將用方向鍵控制蛇的移動*/
{
point man[60]; /*記錄蛇坐標*/
point food; /*記錄食物坐標*/
int key = DOWN,keyb,key1 = DOWN;
int i;
int n = 10;
int score = 0;
long j,time;
clrscr();
for (i = 0; i < 10; ++i)
man[i].x = 12 - i;
for (i = 0; i < 10; ++i)
man[i].y = 3;
DrawWall(); /*畫邊框*/
for (i = 9; i > 0; --i)
DrawBody(man[i].x, man[i].y); /*畫蛇身*/
DrawHead(man[i].x, man[i].y); /*畫蛇頭*/
message(score);
bring_food(man,10,&food); /*產(chǎn)生食物*/
while (key != ESC)
{
if (bioskey(1) != 0) /*如果有鍵按下就接收鍵盤值*/
keyb = bioskey(0);
if ((keyb == SPACE) || (keyb == ESC) || (keyb == UP) || (keyb == DOWN) || (keyb == LEFT) || (keyb == RIGHT))
key = keyb;
switch (key)
{
case UP:
if (key1 == DOWN)
key = key1;
break;
case DOWN:
if (key1 == UP)
key = key1;
break;
case LEFT:
if (key1 == RIGHT)
key = key1;
break;
case RIGHT:
if (key1 == LEFT)
key = key1;
break;
case SPACE:
sleep(3);
if (man[0].x == man[1].x) /*暫停前沿y方向移動*/
{if (man[0].y < man[1].y)
key = UP;
else
key = DOWN;
}
else{if (man[0].x < man[1].x)
key = LEFT;
else
key = RIGHT;
}
break;
defualt:
break;
}
switch (key)
{
case UP:
DrawSpace(man[n-1].x, man[n-1].y);
for (i = n-1; i > 0 ; --i)
{
man[i].x = man[i-1].x;
man[i].y = man[i-1].y;
}
--man[0].y;
for (i = n-1; i > 0; --i)
DrawBody(man[i].x, man[i].y);
DrawHead(man[i].x, man[i].y);
break;
case DOWN:
DrawSpace(man[n-1].x, man[n-1].y);
for (i = n-1; i > 0 ; --i)
{
man[i].x = man[i-1].x;
man[i].y = man[i-1].y;
}
++man[0].y;
for (i = n-1; i > 0; --i)
DrawBody(man[i].x, man[i].y);
DrawHead(man[i].x, man[i].y);
break;
case LEFT:
DrawSpace(man[n-1].x, man[n-1].y);
for (i = n-1; i > 0 ; --i)
{
man[i].x = man[i-1].x;
man[i].y = man[i-1].y;
}
--man[0].x;
for (i = n-1; i > 0; --i)
DrawBody(man[i].x, man[i].y);
DrawHead(man[i].x, man[i].y);
break;
case RIGHT:
DrawSpace(man[n-1].x, man[n-1].y);
for (i = n-1; i > 0 ; --i)
{
man[i].x = man[i-1].x;
man[i].y = man[i-1].y;
}
++man[0].x;
for (i = n-1; i > 0; --i)
DrawBody(man[i].x, man[i].y);
DrawHead(man[i].x, man[i].y);
break;
/* defualt:
break; */
}
if ((man[0].x < 3) || (man[0].x > 58) || (man[0].y < 3) || (man[0].y > 23)) /*碰到邊框*/
break;
for (i = 2; i < n; ++i)
if (man[0].x == man[i].x && man[0].y == man[i].y) /*碰到自己身體*/
{key = ESC;
break;
}
if ((man[0].x == food.x) && (man[0].y == food.y)) /*吃到食物*/
{ score ++;
message(score);
n ++; /*蛇身長度加1*/
bring_food(man,n,&food); /*再產(chǎn)生一個食物*/
}
time = (score < 10) ? 500000 : ((score < 20) ? 400000 : ((score <30) ? 300000 : 200000));
for (j = 1; j < time ; ++j) /*該循環(huán)用來控制時間*/
if ((j != 0) && (j % 8 == 0))
j = j + 2 - 1*2;
else if ((j != 0) && (j % 9 != 1))
j = j + 1 - 1 * 1 * 1;
else j = j+1;
key1 = key; /*記錄下本次的有效按鍵*/
}
if (score != 10 && score != 20 && score != 35)
{ gotoxy(20,10);
textattr(2);
cprintf(" Game Over ");
gotoxy(20,12);
cprintf("Thank you baby!");
getch();
}
return 0;
}
總結
以上是生活随笔為你收集整理的c语言小游戏贪吃神,[原创]自己编的一个贪吃蛇小游戏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android开发版本,Android开
- 下一篇: htc u11 android o,HT