日期:2018.9.11

用时:150min

项目:贪吃蛇(C语言--数组   结构体实现)

开发工具:vs2013

关键知识:数组,结构体,图形库,键位操作

源代码:

 #include<stdio.h>
#include<graphics.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h> #define N 200
int i, key;
int score = ;
int gamespeed = ; void init(void);
void Draw();
void Playgame();
void Prscore();
void Gameover(); struct Food {
int x;
int y;
int yes;
}food; struct Snake{
int x[N];
int y[N];
int node;
int direcion;
int life;
}snake; void main()
{
init();
Draw();
Playgame();
_getch();
} void init(void)
{
initgraph(,);
setbkcolor(WHITE);
cleardevice();
} void Draw()
{
setcolor(BLACK);
for (i = ; i <= ; i += )
{
rectangle(i, , i + , );
rectangle(i, , i + , );
}
for (i = ; i <= ; i += )
{
rectangle(, i, , i + );
rectangle(, i, , i + );
}
} void Playgame()
{
srand((unsigned)time(NULL));//用时间做种,每次产生的随机数不一样。
food.yes = ;//1表示需要出现食物,0表示已有食物
snake.life = ;//0,活着,1 死亡
snake.direcion = ;
snake.x[] = ; snake.y[] = ;
snake.x[] = ; snake.y[] = ;
snake.node = ;
Prscore();
while ()
{
while (!_kbhit())
{
if (food.yes == )
{
food.x = rand() % + ;
food.y = rand() % + ;
while (food.x % != )
food.x++;
while (food.y % != )
food.y++;
food.yes = ;
}
if (food.yes == )
{
setcolor(RED);
rectangle(food.x, food.y, food.x + , food.y + );
}
for (i = snake.node - ; i > ; i--)
{
snake.x[i] = snake.x[i - ];
snake.y[i] = snake.y[i - ];
}
switch (snake.direcion)
{
case :snake.x[] += ; break;
case :snake.x[] -= ; break;
case :snake.y[] -= ; break;
case :snake.y[] += ; break;
}
for (i = ; i < snake.node; i++)
{
if (snake.x[i] == snake.x[] && snake.y[i] == snake.y[])
{
Gameover();
snake.life = ;
break;
}
}
if (snake.x[]< || snake.x[]> || snake.y[]< || snake.y[]>)
{
Gameover();
snake.life = ;
}
if (snake.life == )
break;
if (snake.x[] == food.x&&snake.y[] == food.y)
{
setcolor(BLACK);
rectangle(food.x, food.y, food.x + , food.y + );
snake.x[snake.node] = -; snake.y[snake.node] = -;
snake.node++;
food.yes = ;
score += ;
Prscore();
}
setcolor(GREEN);
for (i = ; i < snake.node; i++)
rectangle(snake.x[i], snake.y[i],snake.x[i] + , snake.y[i] + );
if (food.yes == )
{
if (gamespeed >= )
gamespeed -= ;// 速度最大不超过
} Sleep(gamespeed);
setcolor(WHITE);
rectangle(snake.x[snake.node - ], snake.y[snake.node - ], snake.x[snake.node-] + , snake.y[snake.node - ] + );
}
if (snake.life == )
break;
switch (_getch())
{
case 'w':
case 'W':
if (snake.direcion != )
{
snake.direcion = ;
}
break;
case 'd':
case 'D':
if (snake.direcion != )
{
snake.direcion = ;
}
break;
case 'a':
case 'A':
if (snake.direcion != )
{
snake.direcion = ;
}
break;
case 's':
case 'S':
if (snake.direcion != )
{
snake.direcion = ;
}
break;
}
}
} void Prscore()
{
char str[];
setfillstyle(SOLID_FILL, YELLOW);
bar(, , , );
setcolor();
sprintf_s(str, "score:%d", score);
outtextxy(, , str);
} void Gameover()
{
cleardevice();
setbkcolor(WHITE);
Prscore();
setcolor(RED);
settextstyle(, , "楷体");
outtextxy(, , "GAME OVER");
_getch();
}

运行截图:

最新文章

  1. 远程管理无管理员权限的PC客户端
  2. jmeter(四)Sample之http请求
  3. 用STM32CubeMX创建FreeRTOS项目
  4. all requires API level 3 (current min is 1)问题的解决
  5. android studio中the logging tag can be most 23 characters
  6. apt-get的常用用法
  7. Cocos2d-JS事件处理机制
  8. C++文件操作之get/getline
  9. jira部署,主机迁移,数据库迁移,jira
  10. php 环境变量收集
  11. ThreadPool(线程池) in .Net
  12. mysql数据库的优化技术
  13. C语言_第一讲_C语言入门
  14. Tomcat安装及问题排查方法
  15. I/O模型系列之五:IO多路复用 select、poll、epoll
  16. inode 与black 特点与简介
  17. [Object Tracking] Contour Detection through Tensorflow running on smartphone
  18. B树、B-树、B+树、B*树的定义和区分
  19. Linux线程编程之信号处理
  20. 1.phpcms的安装和卸载文件

热门文章

  1. python 获取字典值
  2. Windows 窗体设计器(Windows Forms Designer)入门
  3. Linux性能测试 free命令
  4. python 教程 第十八章、 Web编程
  5. Matlab Tricks(二十一)—— 软阈值函数的实现
  6. spring boot 集成mybatis连接oracle数据库
  7. RDIFramework.NET框架SOA解(集Windows服务、WinForm形式和IIS发布形式)-分布式应用程序
  8. AR研究-Demo集
  9. ASP.NET MVC 学习笔记1 Talk about controller &amp; route
  10. C#实现下载的几种方式举例