贪吃蛇
来源:互联网 发布:淘宝店铺开通花呗条件 编辑:程序博客网 时间:2024/04/30 11:01
真正意义上的第一个程序.留作纪念.
#include<stdio.h>#include<conio.h>#include<stdlib.h>#include<graphics.h>#include<time.h>#define N 100int i,s,m;char key;struct Food{ int x; int y; int flag;}food;struct Snake{ int x[N]; int y[N]; int node; int dir; int life;}snake; void welcome(){ initgraph(640,480); setcolor(RED); //setlinestyle(PS_DASHDOT,10); //线条类型 setlinestyle(PS_SOLID, 10); line(200,120,440,120); //欢迎界面的上划线 line(200,300,440,300); //欢迎界面的下划线 line(200,120,200,300); //欢迎界面的左划线 line(440,120,440,300); //欢迎界面的右划线 setcolor(YELLOW); settextstyle(30, 0, "黑体"); outtextxy(240,180,"贪吃蛇游戏"); int i=255; int c=255; while(!kbhit()) { setcolor(RGB(c, 0, 0)); settextstyle(15, 0, "宋体"); outtextxy(280, 240, "按任意键继续"); c -= 8; if (c < 0) c = 255; Sleep(50); } getch(); cleardevice();}int speed(){ setcolor(RED); setlinestyle(PS_DASHDOT); line(200,120,440,120); //登录界面的上划线 line(200,300,440,300); //登录界面的下划线 line(200,120,200,300); //登录界面的左划线 line(440,120,440,300); //登录界面的右划线 setcolor(RED); settextstyle(25, 0, "黑体"); outtextxy(240,140,"选择游戏难度"); settextstyle(20, 0, "宋体"); outtextxy(260,180,"1.不战而退."); outtextxy(260,200,"2.简单难度."); outtextxy(260,220,"3.一般难度."); outtextxy(260,240,"4.噩梦难度."); m=getch(); switch(m) { case 49: return 0; break; case 50: return 300; break; case 51: return 150; break; case 52: return 50; break; }}void wall(int x,int y){ setfillcolor(WHITE); solidrectangle(x, y, x+10, y+10); setfillcolor(RED); solidrectangle(x+2, y+2, x+8, y+8);}void Dwall(){ cleardevice(); int i; setlinecolor(RED); setlinestyle(PS_SOLID, 10); line(10,10,500,10); //游戏界面的上划线 line(10,460,500,460); //游戏界面的下划线 line(10,10,10,460); //游戏界面的左划线 line(500,10,500,460); //游戏界面的右划线 for(i=20;i<=480;i=i+20){ wall(i,20); //游戏界面的上面墙 wall(i,440); //游戏界面的下面墙 } for(i=20;i<440; i=i+20){ wall(20,i); //游戏界面的左面墙 wall(480,i); //游戏界面的右面墙 } setcolor(BLUE); settextstyle(30,0, "黑体"); outtextxy(540,120,"score"); outtextxy(540,200,"longth"); setcolor(RGB(120,220,255)); settextstyle(20,0, "宋体"); outtextxy(510,280,"W --上"); outtextxy(510,300,"s --下"); outtextxy(510,320,"a --左"); outtextxy(510,340,"d --右"); outtextxy(510,360,"esc --退出"); outtextxy(510,380,"space --暂停");}void gameover(){ cleardevice(); //清屏 int c=255; while(!kbhit()) { setcolor(RGB(c, 0, 0)); settextstyle(50, 0, "宋体"); outtextxy(100,240,"GAME OVER,LOSER!!!"); settextstyle(15, 0, "宋体"); outtextxy(260,300,"按任意键退出."); c -= 8; if (c < 0) c = 255; Sleep(30); }}void play(){ int score; char str1[5]; char str2[5]; srand((unsigned)time(0)); //这个函数是给随机数产生一个随机种子 food.flag=1; snake.life=0; snake.dir=1; snake.x[0]=250; snake.y[0]=220; snake.x[1]=240; snake.y[1]=220; snake.node=2; do{ if(snake.node==100){ cleardevice(); setcolor(RED); settextstyle(50, 0, "宋体"); outtextxy(100,240,"GAME OVER,WINNER!!!"); settextstyle(20,0, "宋体"); outtextxy(260,300,"按任意键退出."); break; } score=(snake.node-2)*(m-49); sprintf(str1, "%d", score); sprintf(str2, "%d", snake.node); setcolor(RED); settextstyle(20,0, "宋体"); outtextxy(570,160,str1); setcolor(RED); settextstyle(20,0, "宋体"); outtextxy(570,240,str2); while(!kbhit()){ if(food.flag==1){ do{ food.x=rand()%450+30; food.y=rand()%410+30; food.flag=0; }while(food.x%10!=0||food.y%10!=0); } //出现食物 if(food.flag==0){ setfillcolor(GREEN); solidrectangle(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.dir){ case 1: snake.x[0]=snake.x[0]+10; //向右移动 break; case 2: snake.x[0]=snake.x[0]-10; //向左移动 break; case 3: snake.y[0]=snake.y[0]-10; //向上移动 break; case 4: snake.y[0]=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]<30||snake.x[0]>470||snake.y[0]<30||snake.y[0]>430){ gameover(); snake.life=1; break; } //画蛇 setfillcolor(GREEN); solidrectangle(snake.x[0], snake.y[0],snake.x[0]+10,snake.y[0]+10); for(i=1;i<snake.node;i++){ setfillcolor(BLUE); solidrectangle(snake.x[i], snake.y[i],snake.x[i]+10,snake.y[i]+10); } //吃食物 if(snake.x[0]==food.x&&snake.y[0]==food.y){ setfillcolor(BLACK); solidrectangle(food.x,food.y,food.x+10,food.y+10); snake.node++; food.flag=1; } setfillcolor(RED); solidrectangle(snake.x[snake.node-1], snake.y[snake.node-1],snake.x[snake.node-1]+10,snake.y[snake.node-1]+10); Sleep(s); setfillcolor(BLACK); solidrectangle(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=getch(); if(key=='w'||key==38&&snake.dir!=4) //上移 { snake.dir=3; } else if(key=='s'||key==40&&snake.dir!=3) //下移 { snake.dir=4; } else if(key=='d'||key==39&&snake.dir!=2) //右移 { snake.dir=1; } else if(key=='a'||key==37&&snake.dir!=1) //左移 { snake.dir=2; } else if(key==32) { getch(); } }while(s!=0&&key!=27);}void main(){ initgraph(640,480); welcome(); s=speed(); Dwall(); play(); //getch(); closegraph();}
程序用的IDE是VC6.0 编译器没有graphics.h头文件,采用了第三方库Easyx
0 0
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- Android程序员面经
- Hibernate中Session.get()方法和load()方法的详细比较
- Linux进程实践(4) --wait避免僵尸进程
- Java编程:统计文本文件中单词出现频率
- codeblocks 中使用opencv
- 贪吃蛇
- 【NOIP2016提高A组模拟9.24】天使的分裂
- Volley基本用法
- 【C++】位操作(3)-获取某位的值
- Java设计模式之单例模式
- 远程注入小记
- mogodb 介绍(一)----安装及配置
- 百度开源高性能RPC框架 sofa-pbrpc
- Linux 文件种类