C语言贪吃蛇小程序

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<conio.h>
  4 #include<windows.h>
  5
  6 #define High 20
  7 #define Width 50
  8
  9 int direction,food_x,food_y;
 10 int canvas[High][Width]={0};//二维数组为小蛇运动空间
 11
 12 void goto_xy(int x,int y)//光标移动函数   https://blog.csdn.net/konghouy/article/details/80230571
 13 {
 14     HANDLE handle_out=GetStdHandle(STD_OUTPUT_HANDLE);
 15     COORD pos;
 16     pos.X=x;
 17     pos.Y=y;
 18     SetConsoleCursorPosition(handle_out,pos);
 19 }
 20
 21 void Init(void)//初始化函数
 22 {
 23     int i,j;
 24     for(i=0;i<High;i++)
 25     {
 26         canvas[i][0]=-1;
 27         canvas[i][Width-1]=-1;
 28     }
 29     for(j=0;j<Width;j++)
 30     {
 31         canvas[0][j]=-1;
 32         canvas[High-1][j]=-1;//以上为边框对应的数组元素值
 33     }
 34     for(i=0;i<5;i++)
 35     {
 36         canvas[High/2][Width/2-i]=i+1;//蛇头蛇身对应数组元素值
 37     }
 38     begin:food_x=rand()%(High-5)+2; //食物生成      https://blog.csdn.net/u010141928/article/details/71439570
 39     food_y=rand()%(Width-5)+2;
 40     if(canvas[food_x][food_y]==0)
 41         canvas[food_x][food_y]=-2;//食物对应数组元素值
 42     else
 43         goto begin;
 44 }
 45
 46 void show(void)//显示函数
 47 {
 48     goto_xy(0,0);//每次界面显示都从原点处光标开始
 49     int i,j;
 50     for(i=0;i<High;i++)
 51     {
 52         for(j=0;j<Width;j++)
 53         {
 54             if(canvas[i][j]==-1)
 55                 printf("#");
 56             else if(canvas[i][j]==1)
 57                 printf("@");
 58             else if(canvas[i][j]>1)
 59                 printf("*");
 60             else if(canvas[i][j]==-2)
 61                 printf("F");
 62             else
 63                 printf(" ");
 64         }
 65         printf("\n");
 66     }
 67     Sleep(100);                 //https://zhidao.baidu.com/question/106833147.html
 68 }
 69
 70 void Snake_Move(void)
 71 {
 72     int i,j;
 73     int max=1;
 74     int Old_Tail_x,Old_Tail_y,Old_Head_x,Old_Head_y,New_Head_x,New_Head_y;
 75     for(i=1;i<High-1;i++)
 76         for(j=1;j<Width-1;j++)
 77         {
 78             if(canvas[i][j]>0)
 79             {
 80                 canvas[i][j]++;
 81                 if(canvas[i][j]==2)
 82                 {
 83                     Old_Head_x=i;
 84                     Old_Head_y=j;
 85                 }
 86                 if(max<canvas[i][j])
 87                 {
 88                     max=canvas[i][j];
 89                     Old_Tail_x=i;
 90                     Old_Tail_y=j;
 91                 }
 92             }
 93         }
 94     if(direction==1)             //‘D‘小蛇向右走
 95     {
 96         New_Head_x=Old_Head_x;
 97         New_Head_y=Old_Head_y+1;
 98     }
 99     else if(direction==2)        //‘W‘小蛇向上走
100     {
101         New_Head_x=Old_Head_x-1;
102         New_Head_y=Old_Head_y;
103     }
104     else if(direction==3)        //‘A‘小蛇向左走
105     {
106         New_Head_x=Old_Head_x;
107         New_Head_y=Old_Head_y-1;
108     }
109     else if(direction==4)        //‘S‘小蛇向下走
110     {
111         New_Head_x=Old_Head_x+1;
112         New_Head_y=Old_Head_y;
113     }
114     if(canvas[New_Head_x][New_Head_y]==-1||canvas[New_Head_x][New_Head_y]>0)//判定失败
115     {
116         printf("游戏失败\n");
117         exit(-1);
118     }
119     else if(canvas[New_Head_x][New_Head_y]==-2)//吃到食物
120     {
121         begin:food_x=rand()%(High-5)+2;
122         food_y=rand()%(Width-5)+2;
123         if(canvas[food_x][food_y]==0)
124             canvas[food_x][food_y]=-2;
125         else
126             goto begin;
127         canvas[New_Head_x][New_Head_y]=1;
128     }
129     else
130     {
131         canvas[Old_Tail_x][Old_Tail_y]=0;
132         canvas[New_Head_x][New_Head_y]=1;
133     }
134 }
135
136 int Direction_Control(void)
137 {
138     int input=0;
139     if(kbhit())            //https://blog.csdn.net/boreassoft/article/details/76728405
140     {
141         input=getch();
142         if(‘D‘==input)   //https://zhidao.baidu.com/question/309492191.html
143         {
144             direction=1;
145             Snake_Move();
146         }
147         else if(‘W‘==input)
148         {
149             direction=2;
150             Snake_Move();
151         }
152         else if(‘A‘==input)
153         {
154             direction=3;
155             Snake_Move();
156         }
157         else if(‘S‘==input)
158         {    direction=4;
159             Snake_Move();
160         }
161     }
162     return input;
163 }
164
165 int main(void)
166 {
167     int t;
168     Init();
169     direction=1;//设定初始运动方向向右
170     while(1)
171     {
172         show();
173         t=Direction_Control();
174         if(t==0)
175         Snake_Move();
176     }
177     return 0;
178 }

原文地址:https://www.cnblogs.com/bigdapi/p/9655656.html

时间: 2024-10-14 15:45:25

C语言贪吃蛇小程序的相关文章

程序游戏推荐(C语言贪吃蛇,python天天酷跑(需要安装pygame),js是狠人就坚持30s)

下面是下载位置,我把他们上传到我的文件下了. C语言贪吃蛇:https://files.cnblogs.com/files/ITXiaoAng/%E8%B4%AA%E5%90%83%E8%9B%87.rar python天天酷跑:https://files.cnblogs.com/files/ITXiaoAng/%E5%A4%A9%E5%A4%A9%E9%85%B7%E8%B7%91.zip 30s: https://files.cnblogs.com/files/ITXiaoAng/%E7%B

贪吃蛇小游戏 (一)

贪吃蛇是一款儿时爱不释手的游戏.近日修行,想玩玩游戏开发.便简单写了个控制台版的贪吃蛇. 程序的简单框架: 建立一张固定大小的MAP,保存输出信息. 当信息有变动时,用system("cls")进行清屏操作,再重新输出实现伪动态. 重点算法在蛇身的移动,转向与增长.三者均基于链表实现. 移动与转向:通过判定移动方向,确定下一步移动的位置后,新建表头结点.将新表头结点置为表头.删除末尾结点. 增长:通过判断尾部移动方向,确定位置后在尾部添加节点. 熟练运用链表的同学,相信也是小菜一碟了.

贪吃蛇小游戏的初步尝试制作

这里利用二维数组做为地图,利用集合来存放蛇头和蛇尾的位置坐标,初步实现一个需要键盘控制的贪吃蛇小游戏. 首先,Main函数下面需要一个大循环来让游戏失败的时候能够重新开始,这里我们用了定义了一个bool型的sc,判断sc的true和flase来确定游戏是否开始: static void Main(string[] args)        { bool sc = true; while (sc) //大循环,用于游戏失败重新开始            { 下面是定义一个集合snake_x来存放蛇

Java版贪吃蛇小游戏的实现

使用的IDE eclipse JDK版本 1.6 辅助类 Coordinate.java package com.nn.util; /** *坐标点 */ public class Coordinate { public int x; public int y; public Coordinate(int newX, int newY) { x = newX; y = newY; } public boolean equals(Coordinate other) { if (x == other

一个简单的“贪吃蛇”小游戏

一个简单的“贪吃蛇”小游戏 页面结构 简单的21x21的方块,页面结构 id为container的div包含所21个class名为row的div,每个row代表贪吃蛇的一整行,每个row中又包含21个div,代表这一行的每一个div方格,如果这个方格是空的话,div的类名为blank,如果这一个方格表示“贪吃蛇”的“食物”,div的类名为food,如果这一个方格表示“蛇”,div的类名为snake. CSS JS 然后我们思考下一个贪吃蛇游戏需要那些参数, 首先,界面中可见的元素无非就是空方格,

使用Html5+JS做的贪吃蛇小游戏

学习了Html5的Canvas的使用,和JS创建对象,做了一个贪吃蛇小游戏,来巩固JS面向对象编程和Canvas的用法. Node.js 1 /** 2 * 格子类,组成贪吃蛇和舞台 3 */ 4 function Node(x,y){ 5 this.x=x; 6 this.y=y; 7 /** 8 * 比较两个格子是否重合 9 */ 10 this.equals=function(x,y){ 11 return this.x==x&&this.y==y; 12 } 13 } Snake.

贪吃蛇小游戏java实现代码分析

贪吃蛇小游戏java实现代码分析 贪吃蛇的小游戏,网上的代码比较多,今天周五,在教研室没啥事做,在电脑中发现了一个贪吃蛇的小游戏,于是就看了下实现的源码,发现别人写的代码确实挺好的,自己也是边加注释边进行理解的去看别人实现的游戏源码,发现还是挺有意思的.自己花了一个下午的时间看了源码,也加了一点小小的功能,于是,不写篇博客觉得对不起自己也,哈哈哈. 此游戏代码的思路非常的清晰,也相当好理解,没有太多难的地方,不过有很多值得学习的地方,因为,这份源码中,对java.awt包中的很多类的很多方法都进

用C写一个功能较为完善的贪吃蛇小游戏

主要功能: 方向控制-食物与增长-变速 1 #include<stdio.h> 2 #include<time.h>//种子-随机数 3 #include<windows.h>//system函数,控制台句柄 4 #include<conio.h>//按键 5 //界面(欢迎界面-游戏界面-结束得分界面)-驱动-方向控制-食物 6 //位置锁定-打印-删除 7 int snake_x[520]={0}; 8 int snake_y[520]={0}; 9 i

C语言实现的贪吃蛇小游戏

学习完C语言基础后,当然要做点小东西来巩固一下知识啦~~,之前做的学生信息管理系统是比较小的,搞定之后决定还是做个贪吃蛇的小游戏,这是学习C语言的经典入门小程序,下面简单地说下用C语言开发这个需要用到什么库吧. 贪吃蛇 我刚刚做的时候也是一头雾水,不知道为什么别人能够在控制台应用程序中能够画出这么复杂的界面,经过网上的一番查找,终于知道,C语言是有方法定位光标的位置的. // 移动光标到指定位置 void Gotoxy(int x, int y) { COORD position = { y,