C语言贪吃蛇代码,新手很容易上手
没做什么积分,复杂地图,就是简单的实现贪吃蛇的功能,
/* WIN-TC BGI 图形编程模板 */
#include "Conio.h"
#include "graphics.h"
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#define closegr closegraph
#define Max 100
#define ENTER 7181
#define UP 18432
#define DOWN 20480
#define LEFT 19200
#define RIGHT 19712
#define LOWERV 12150
int score=0;
int gamespeed=1000;
void rungame();
struct Food
{ int x;
int y;
int status;
}food;
struct Snake
{ int x[Max];
int y[Max];
int dir; /* 1东,2南,3西,4北*/
int status; /* 1活,0死*/
int length;
}snake;
void initgr(void) /* BGI初始化 */
{
int gd = DETECT, gm = 0; /* 和gd = VGA,gm = VGAHI是同样效果 */
registerbgidriver(EGAVGA_driver);/* 注册BGI驱动后可以不需要.BGI文件的支持运行 */
initgraph(&gd, &gm, "");
}
void bwall()
{ int i=0;
setbkcolor(6);
cleardevice();
setcolor(11);
setlinestyle(0,0,3);
setfillstyle(1,4);
for(i=0;i<65;i++)
{
rectangle(0+i*10,0,10+i*10,10);
rectangle(630-i*10,460,640-i*10,470);
}
for(i=0;i<65;i++)
{
rectangle(0,0+i*10,10,10+i*10);
rectangle(630,460-i*10,640,470-i*10);
}
}
void csnake(){
int i;
srand(time(NULL));
snake.x[0]=30; /*((rand()%200)/10)*10+20; 随机位置设置 */
snake.y[0]=30; /*((rand()%200)/10)*10+20; */
snake.x[1]=snake.x[0]-10;
snake.y[1]=snake.y[0];
snake.length=2;
snake.dir=1;
snake.status=1;
food.status=1;
setcolor(1);
setlinestyle(0,0,3);
rectangle(snake.x[0],snake.y[0],snake.x[0]+10,snake.y[0]+10);
setlinestyle(1,0,3);
rectangle(snake.x[1],snake.y[1],snake.x[1]+10,snake.y[1]+10);
}
void playgame()
{
bwall(); /*建立围墙 */
csnake(); /* 建蛇 */
rungame(); /*蛇行走过程*/
}
void adfood(int count)
{ food.x=100; /* ((rand()%400)/10)*10+20; 随机食物位置 */
food.y=100; /*((rand()%400)/10)*10+20; */
setcolor(14);
setlinestyle(1,0,3);
rectangle(food.x,food.y,food.x+10,food.y+10); /* 食物添加 */
food.status--;
printf(" status:%d ",food.status);
}
void swfood() /*吃食步骤*/
{
setcolor(6);
setlinestyle(0,0,3);
rectangle(food.x,food.y,food.x+10,food.y+10);
snake.length++;
snake.x[snake.length-1]= snake.x[snake.length-2];
snake.y[snake.length-1]= snake.x[snake.length-2];
printf("swfood ,length:%d",snake.length);
food.status++;
printf(" status:%d ",food.status);
}
void rungame()
{
int x,y;
int i=0;
int s=0;
int key;
int count=0;
srand(time(NULL));
while(++coun
t&&snake.status==1){
/*printf(" %dth circle:", count); */
/*printf("bcheck A ");*/
for(i=0;i<100;i++){
没做什么积分,复杂地图,就是简单的实现贪吃蛇的功能,
delay(gamespeed);
if(bioskey(1)!=0){
key=bioskey(0); /* bioskey(1)检查是否按键,0返回按键值 */
s=1;
break;
}
}
/*printf(" B ");*/
x=snake.x[0];
y=snake.y[0];
if(s==1){ /*printf(" C, ");*/
switch(key)
{
/*按键判断:四个方向*/
case UP:if(snake.dir!=2) { snake.dir=4; y-=10 ;} else y+=10; break;
case DOWN:if(snake.dir!=4) { snake.dir=2; y+=10; } else y-=10; break;
case RIGHT:if(snake.dir!=3) { snake.dir=1; x+=10; } else x-=10; break;
case LEFT:if(snake.dir!=1) { snake.dir=3; x-=10;} else x+=10; break;
case ENTER:exit(0);break;
}
} /* end if 转向判断*/
else
switch(snake.dir)
{
case 1: x+=10; break;
case 2: y+=10; break;
case 3: x-=10; break;
case 4: y-=10; break;
}
if(x>=620||y>=450||x<=10||y<=10)
{ snake.status=0;
printf("you strike the wall"); /* 撞墙后重新开始函数 */
}
if(snake.length>=4)
{ int j;
for(j=1;j<snake.length;j++)
if(x==snake.x[j]&&y==snake.y[j])
{ snake.status=0;
printf("you eat yourself"); /*吃掉自己后重新开始函数 */
}
}
if(x==food.x&&y==food.y)
{
printf("rungame food ,length:%d",snake.length);
swfood();
} /*吃食*/
if(food.status==1) /* 添加食物*/
adfood(count);
if((count-1)%snake.length+1)
{ setcolor(14);
setlinestyle(1,0,3);
rectangle(food.x,food.y,food.x+10,food.y+10);
} /* 下面的蛇身打印会覆盖食物的打印,所以当蛇身走过后要刷新食物才能使食物可见*/
setcolor(6);
setlinestyle(0,0,3);
rectangle(snake.x[snake.length-1],snake.y[snake.length-1],snake.
x[snake.length-1]+10,snake.y[snake.length-1]+10); /* 去掉蛇尾 */
/* printf("x[1]/[2] is %d/%d,snake.length-1/2 is %d/%d",
snake.x[snake.length-1],snake.x[snake.length-2],
snake.length-1,snake.length-2);*/
for(i=snake.length-1;i>0;i--)
{
snake.x[i]=snake.x[i-1];
snake.y[i]=snake.y[i-1];
}
snake.x[0]=x;
snake.y[0]=y;
for(i=0;i<snake.length;i++)
{
setcolor(1);
rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]+10);
}
} /* end while 1*/
}
int mai
n(vo
…… 此处隐藏:2191字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [高中教育]电子线路高频非线性部分2.1
- [高中教育]中班美术活动——我的小手
- [高中教育]常用三极管参数大全
- [高中教育]计算机常见故障及解决办法
- [高中教育]风机基础环水平度控制方法探讨
- [高中教育]机械安全工程(专升本)阶段性作业3
- [高中教育]2009年安徽省高考语文考试说明刍议
- [高中教育]unit5 let's eat公开课教案设
- [高中教育]计算机网络原理课后习题答案
- [高中教育]2016-2022年中国新能源市场研究与投资
- [高中教育]2015-2020年中国会议行业市场评估及投
- [高中教育]经销商大会峰会主持人串词开场白
- [高中教育]2014新版北师大数学三年级上册小熊购物
- [高中教育]七年级第一学期体育与健康全套教案
- [高中教育]第三章:国际金融市场
- [高中教育]六年级下册数学单元测试-2.比例 北师大
- [高中教育]2016年上海海事大学法学院624刑法之《
- [高中教育]中国碳化钙产业竞争现状及未来五年投资
- [高中教育]网络时代,我们怎么玩
- [高中教育]圆锥曲线——高中数学基础知识与典型例
- 高集医院世界艾滋病宣传日活动方案
- 苏教版六年级英语上册期末试卷含答案
- 全民枪战生化英雄模式幽灵怎么玩 生化
- 灿烂的宋元文化一导学案
- 第2章货币资金与应收款项
- 北师大版八年级下册数学第三章《分式》
- 浅析高分子材料成型加工技术
- 华南理工大学2013年度共青团先进集体及
- 教师资格科目二小学教案模板(共合集)
- 工程扩建可研报告
- 中华人民共和国海事局2014年度招录公务
- 提高农村小学生作文能力的教学尝试
- 徒手心肺复苏术操作步骤
- 毛概试题库7-15章
- 2014-2015学年度(上)初中班主任工作计
- 企业驾驶员安全生产责任书
- 第07章 不等式测试题-2016年高考文科数
- 医疗器械经营企业工作程序
- 考研英语必背36篇_彩版_精华
- 初中9月13-15假期作业 (1)




