加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C语言贪食蛇游戏

发布时间:2020-12-16 07:42:33 所属栏目:百科 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 开发环境vc6.0 #include graphics.h#include stdlib.h#include conio.h#include time.h#include stdio.h#include "snake.h"int score = 0;int gamespe

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

开发环境vc6.0

#include <graphics.h> #include <stdlib.h> #include <conio.h> #include <time.h> #include <stdio.h> #include "snake.h" int score = 0; int gamespeed = 100; //蛇运行速度 static void Init(void); /*图形驱动*/ static void Close(void); /*图形结束*/ static void Game_interface(void); /*游戏界面*/ static void GameOver(void); /*结束游戏*/ static void GamePlay(void); /*游戏过程*/ static void PrScore(void); /*输出成绩*/ /*主函数*/ int main(void) { Init(); Game_interface(); GamePlay(); Close(); return 0; } /*图形驱动*/ static void Init(void) { int gd=9,gm=2; initgraph(&gd,&gm," "); cleardevice(); } /* 开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙 */ static void Game_interface(void) { int i; setcolor(LIGHTCYAN); /*setbkcolor(LIGHTGREEN);*/ setlinestyle(PS_SOLID,1); /*设置线型*/ for(i=50;i<=600;i+=10) /*画边框*/ { rectangle(i,40,i+10,49); /*上边框*/ rectangle(i,451,460); /*下边框*/ } for(i=40;i<=450;i+=10) { rectangle(50,i,59,i+10); /*左边框*/ rectangle(601,610,i+10); /*右边框*/ } } /* 游戏主函数 */ static void GamePlay(void) { int i; srand(time(NULL)); /*随机数发生器*/ 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++) { if((snake.x[i] == snake.x[0]) && (snake.y[i] == snake.y[0])) { GameOver(); /*显示失败*/ snake.life = 1; break; } } if((snake.x[0] < 55) || (snake.x[0] > 595) || (snake.y[0] < 55) || (snake.y[0] > 455)) /*蛇是否撞到墙壁*/ { GameOver(); /*本次游戏结束*/ snake.life = 1; /*蛇死*/ } if(snake.life == 1) /*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/ break; if((snake.x[0] == food.x) && (snake.y[0] == food.y)) /*吃到食物以后*/ { setcolor(BLACK); /*把画面上的食物东西去掉*/ rectangle(food.x,food.x+10,food.y-10); snake.x[snake.node] = -20; snake.y[snake.node] = -20; /* 新的一节先放在看不见的位置,下次循环就取前一节的位置 */ snake.node++; /*蛇的身体长一节*/ food.yes = 1; /*画面上需要出现新的食物*/ score += 10; PrScore(); /*输出新得分*/ } setcolor(RED); /*画出蛇*/ for(i=0;i<snake.node;i++) rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]-10); Sleep(gamespeed); setcolor(BLACK); /*用黑色去除蛇的的最后一节*/ rectangle(snake.x[snake.node-1],snake.y[snake.node-1],snake.x[snake.node-1]+10,snake.y[snake.node-1]-10); } /*endwhile(!kbhit)*/ if(snake.life == 1) /*如果蛇死就跳出循环*/ break; key=getch(); /*接收按键*/ if (key == ESC) break; /*按ESC键退出*/ switch(key) { case UP: if(snake.direction != 4) /*判断是否往相反的方向移动*/ snake.direction = 3; break; case RIGHT: if(snake.direction != 2) snake.direction = 1; break; case LEFT: if(snake.direction != 1) snake.direction = 2; break; case DOWN: if(snake.direction != 3) snake.direction = 4; break; } }/*endwhile(1)*/ } /*游戏结束*/ static void GameOver(void) { cleardevice(); PrScore(); setcolor(RED); setfont(56,"黑体"); outtextxy(200,200,"GAME OVER"); getch(); } /*输出成绩*/ static void PrScore(void) { char str[10]; setfillstyle(YELLOW); bar(50,15,220,35); setcolor(BROWN); setfont(16,"宋体"); sprintf(str,"score:%d",score); outtextxy(55,16,str); } static void Close(void) { closegraph(); }
#ifndef SNAKE_H
#define	SNAKE_H


#define LEFT 'a'
#define RIGHT 'd'
#define DOWN 's'
#define UP 'w'
#define ESC 27

#define N 200				/*蛇的最大长度*/

char key;					/*控制按键*/


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;



#endif

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读