C语言10大经典实例
案例一 贪吃蛇游戏
#define N 200
#include
#include
#include
#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;/* 蛇的生命,0活着,1死亡*/
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,"c:\\tc" ; cleardevice ; /*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/
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;/*1表示需要出现新食物,0表示已经存在食物*/ 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 /*可以重复玩游戏,压ESC键结束*/ 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]; /*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/
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++ /*从蛇