Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C语言 小游戏之贪吃蛇

C语言 小游戏之贪吃蛇

作者头像
全栈程序员站长
发布于 2022-07-12 06:51:23
发布于 2022-07-12 06:51:23
1K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

还记得非常久曾经听群里人说做贪吃蛇什么的,那时候大一刚学了C语言,认为非常难,根本没什么思路。

前不久群里有些人又在谈论C语言贪吃蛇的事了,看着他们在做,我也打算做一个出来。

如今大三,经过了这一年半的编程,如今认为这个C语言的贪吃蛇还是比較简单的,花的时间不非常多!

我认为主要是思路正确,基本上就米什么大的问题。

如今贴上我的代码和我的详解,希望大家多交流。

首先说下我这个贪吃蛇仅仅是一个简单的,游戏结束有2种可能:一碰墙,二自杀即蛇头碰到蛇身。

如有不好之处,请见谅把。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
首先说下我这个贪吃蛇仅仅是一个简单的,游戏结束有2种可能:一碰墙,二自杀即蛇头碰到蛇身。
如有不好之处,请见谅把。
 


//*******************************************************
//**************版权所有***2011.9.20***咸鱼**************
//*******************************************************
//*友情提示:如想速度快点,请改小_sleep(500)函数中參数*****
//*******************************************************
//*****************如写的不好,请见谅*********************
//*******************************************************
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <time.h>
const int H = 8;   //地图的高
const int L = 16;  //地图的长
char GameMap[H][L];   //游戏地图
int  key;  //按键保存
int  sum = 1, over = 0;  //蛇的长度, 游戏结束(自吃或碰墙)
int  dx[4] = {0, 0, -1, 1};  //左、右、上、下的方向
int  dy[4] = {-1, 1, 0, 0};
struct Snake   //蛇的每一个节点的数据类型
{
 int x, y;  //左边位置
 int now;   //保存当前节点的方向, 0,1,2,3分别为左右上下
}Snake[H*L];
const char Shead = '@';  //蛇头
const char Sbody = '#';  //蛇身
const char Sfood = '*';  //食物
const char Snode = '.';  //'.'在地图上标示为空
void Initial();  //地图的初始化
void Create_Food(); //在地图上随机产生食物
void Show();   //刷新显示地图
void Button();  //取出按键,并推断方向
void Move();   //蛇的移动
void Check_Border();  //检查蛇头是否越界
void Check_Head(int x, int y);   //检查蛇头移动后的位置情况
int main() 
{
 Initial();
 Show();
 return 0;
}
void Initial()  //地图的初始化
{
 int i, j;
 int hx, hy;
 system("title 贪吃蛇");  //控制台的标题
 memset(GameMap, '.', sizeof(GameMap));  //初始化地图所有为空'.'
 system("cls");
 srand(time(0));   //随机种子
 hx = rand()%H;    //产生蛇头
 hy = rand()%L;
 GameMap[hx][hy] = Shead;
 Snake[0].x = hx;  Snake[0].y = hy;
 Snake[0].now = -1;
 Create_Food();   //随机产生食物
 for(i = 0; i < H; i++)   //地图显示
 { 
  for(j = 0; j < L; j++)
   printf("%c", GameMap[i][j]);
  printf("\n");
 }
  
 printf("\n小小C语言贪吃蛇\n");
 printf("按随意方向键開始游戏\n");
 
 getch();   //先接受一个按键,使蛇開始往该方向走
 Button();  //取出按键,并推断方向
}
void Create_Food()  //在地图上随机产生食物
{
 int fx, fy;
 while(1)
 {
  fx = rand()%H;
     fy = rand()%L;
  
  if(GameMap[fx][fy] == '.')  //不能出如今蛇所占有的位置
  { 
   GameMap[fx][fy] = Sfood;
      break;
  }
 }
}
void Show()  //刷新显示地图
{
 int i, j;
 while(1)
 {  
  _sleep(500); //延迟半秒(1000为1s),即每半秒刷新一次地图
  Button();   //先推断按键在移动
  Move();
  if(over)  //自吃或碰墙即游戏结束
  { 
   printf("\n**游戏结束**\n");
   printf("     >_<\n");
   getchar();
      break;
  }
  system("cls");   //清空地图再显示刷新吼的地图
  for(i = 0; i < H; i++) 
  { 
   for(j = 0; j < L; j++)
    printf("%c", GameMap[i][j]);
   printf("\n");
  }
  
  printf("\n小小C语言贪吃蛇\n");
  printf("按随意方向键開始游戏\n");
 }
}
void Button()  //取出按键,并推断方向
{
 if(kbhit() != 0) //检查当前是否有键盘输入,若有则返回一个非0值,否则返回0
 { 
  while(kbhit() != 0)  //可能存在多个按键,要所有取完,以最后一个为主
      key = getch(); //将按键从控制台中取出并保存到key中
  switch(key)
  {   //左
   case 75:  Snake[0].now = 0;
          break;
            //右
            case 77:  Snake[0].now = 1;     
          break;
            //上
   case 72:  Snake[0].now = 2;
          break;
            //下
   case 80:  Snake[0].now = 3;
          break;
  }
 }
}
void Move()   //蛇的移动
{
 int i, x, y;
    int t = sum;  //保存当前蛇的长度
 //记录当前蛇头的位置,并设置为空,蛇头先移动
 x = Snake[0].x;  y = Snake[0].y;  GameMap[x][y] = '.';
 Snake[0].x = Snake[0].x + dx[ Snake[0].now ];
 Snake[0].y = Snake[0].y + dy[ Snake[0].now ];
 Check_Border();   //蛇头是否越界
 Check_Head(x, y);  //蛇头移动后的位置情况,參数为: 蛇头的開始位置
 if(sum == t)  //未吃到食物即蛇身移动哦
    for(i = 1; i < sum; i++)  //要从蛇尾节点向前移动哦,前一个节点作为參照
 {
  if(i == 1)   //尾节点设置为空再移动
   GameMap[ Snake[i].x ][ Snake[i].y ] = '.';
  
  if(i == sum-1)  //为蛇头后面的蛇身节点,特殊处理
  {
   Snake[i].x = x;
         Snake[i].y = y;
      Snake[i].now = Snake[0].now;
  }
  else   //其它蛇身即走到前一个蛇身位置
  {
   Snake[i].x = Snake[i+1].x;
         Snake[i].y = Snake[i+1].y;
      Snake[i].now = Snake[i+1].now;
  }
   
  GameMap[ Snake[i].x ][ Snake[i].y ] = '#'; //移动后要置为'#'蛇身 
 }
}
void Check_Border()  //检查蛇头是否越界
{
 if(Snake[0].x < 0 || Snake[0].x >= H
 || Snake[0].y < 0 || Snake[0].y >= L)
     over = 1;
}
void Check_Head(int x, int y)  //检查蛇头移动后的位置情况
{
 
 if(GameMap[ Snake[0].x ][ Snake[0].y ] == '.')  //为空
  GameMap[ Snake[0].x ][ Snake[0].y ] = '@';
 else
  if(GameMap[ Snake[0].x ][ Snake[0].y ] == '*')  //为食物
  {
   GameMap[ Snake[0].x ][ Snake[0].y ] = '@';  
   Snake[sum].x = x;   //新添加�的蛇身为蛇头后面的那个
      Snake[sum].y = y;
      Snake[sum].now = Snake[0].now;
         GameMap[ Snake[sum].x ][ Snake[sum].y ] = '#'; 
   sum++;
   Create_Food();  //食物吃完了立即再产生一个食物
  }
  else
   over = 1;
}

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/118958.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年11月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
贪吃蛇小游戏程序(C语言)
最近暑假无事开始用C语言写一些小游戏小游戏程序,这个贪吃蛇当然是经典中的经典,所以先开始写。
跋扈洋
2021/06/15
2.8K0
贪吃蛇小游戏程序(C语言)
花狗C语言彩色贪吃蛇(完整代码)
这是我在博客写的第一篇文章,如果哪里有问题还请多多指教!!以前我写的贪吃蛇是全图刷新的,导致在窗口运行时,眼睛都快闪瞎了!今天为大家带来了不闪的贪吃蛇!!!废话不多说,上图,上代码!!
花狗Fdog
2020/10/28
2.4K0
花狗C语言彩色贪吃蛇(完整代码)
【C语言】【数据结构】项目实践——贪吃蛇游戏(超详细)
贪吃蛇是一款休闲益智类游戏,有PC和手机等多平台版本。既简单又耐玩。该游戏通过控制蛇头方向吃食物,从而使得蛇变得越来越长,贪吃蛇是久负盛名的游戏,它也和俄罗斯方块,扫雷等游戏位列经典游戏的行列。
用户11290673
2024/09/25
6270
【C语言】【数据结构】项目实践——贪吃蛇游戏(超详细)
【C语言】实践:贪吃蛇小游戏(附源码)
贪吃蛇小游戏想必大家都玩过吧,现在就要C语言代码来实现一下贪吃蛇小游戏
星辰与你
2024/10/17
6340
【C语言】实践:贪吃蛇小游戏(附源码)
贪吃蛇C语言代码
虽然说是智能但是可能并没有你想象中那么智能==。 基本思路是按照上、右、下、左的顺序搜索方向,使得沿该方向前进能够靠近食物,前进过程中遇到障碍会自动绕开,可是不能避免蛇头被蛇身包围的情况。
全栈程序员站长
2022/09/01
6.6K0
贪吃蛇代码实现_贪吃蛇游戏代码
按方向键上下左右,可以实现蛇移动方向的改变。 短时间长按方向键上下左右其中之一,可实现蛇向该方向的短时间加速移动。 按空格键可实现暂停,暂停后按任意键继续游戏。 按Esc键可直接退出游戏。 按R键可重新开始游戏。 蛇头触碰障碍物或自身造成游戏结束时,可按“y”重新开始或按“n”结束游戏 除此之外,本游戏还拥有计分系统,可保存玩家的历史最高记录。
全栈程序员站长
2022/10/29
2.5K0
贪吃蛇代码实现_贪吃蛇游戏代码
C++项目贪吃蛇游戏笔记-C语言版
#include <stdio.h> #include <Windows.h> #include <stdlib.h> #include <time.h> #include <conio.h> #define ROW 22 //游戏区行数 #define COL 42 //游戏区列数 #define KONG 0 //标记空(什么也没有) #define WALL 1 //标记墙 #define FOOD 2 //标记食物 #define HEAD 3 //标记蛇头 #define BODY 4 //标
CtrlX
2022/09/28
1K0
C语言——贪吃蛇
Windows可以给我们提供各种服务(每一个服务就是一个函数),可以帮应用程序达到开启视窗、描绘图形、使用周边设备等目的。这些函数的服务对象是应用程序(Application),所以便称之为ApplicationProgrammingInterface,简称API函数。。
HZzzzzLu
2024/11/26
1560
C语言——贪吃蛇
C语言实现贪吃蛇【完整版】
实现过程使用了WIN32的一些API,这里简单介绍一下这些API的功能。
用户11029129
2024/06/04
3490
C语言实现贪吃蛇【完整版】
c语言实现贪吃蛇小游戏
如果运行之后出现的是上面的界面,就需要更改一下,鼠标右键点击控制台顶端,再点击设置
2的n次方
2024/10/15
1020
c语言实现贪吃蛇小游戏
C语言_贪吃蛇
2)一般情况下界面保持有一个随机的食物,由“□”表示;即蛇每吃掉一个食物,再随机出现下一个食物;界面初始化时会给出一个食物
From Zero
2021/02/22
7080
贪吃蛇(C语言实现)
贪吃蛇游戏当中蛇的移动速度可以进行调整,动图当中把速度调得较慢(速度太快导致动图上蛇身显示不全),下面给出的代码当中将蛇的速度调整到了合适的位置,大家可以试试。
全栈程序员站长
2022/08/24
2.2K0
贪吃蛇(C语言实现)
【C语言】打造你的专属贪吃蛇
我们如果要在控制台上打印宽字符’●’或者’★’,汉字也是宽字符,就需要修改本地适配环境,在main函数中://修改适配本地的中文环境 setlocale(LC_ALL, "");,使用该函数要包含#include<locale.h> 头文件
大耳朵土土垚
2024/05/30
1290
【C语言】打造你的专属贪吃蛇
C语言实现简单贪吃蛇代码
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/141348.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/01
2.4K0
C语言实现简单贪吃蛇代码
C语言贪吃蛇完整代码
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/141078.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/24
4.1K1
【C语言】实现贪吃蛇游戏
我们要用C语言来实现贪吃蛇游戏之前,得了解C语言函数、枚举、结构体、动态内存管理、预处理指令、链表和Win32 API等等的一些相关知识。 关于链表和函数,在之前的文章中都有写过了,友友们可以自行查看。剩下知识会在之后的博客中所提及,请大家多多关注。 这里主要介绍Win32 API,及如何一步一步实现贪吃蛇游戏。
zxctscl
2024/01/23
4970
【C语言】实现贪吃蛇游戏
贪吃蛇小游戏
游戏截图: 源码如下: #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<Windows.h> #include<ctime> #i
大忽悠爱学习
2021/03/04
4840
c语言课程设计之贪吃蛇代码及思路
注:本文档需与c语言课程设计之贪吃蛇文档配套使用。c语言实现贪吃蛇代码可随意下载 c语言课程设计报告也可随意下载 1.本代码在VS2013下可正常运行,其他版本需根据版本需要进行调试。 2.代码在Csnake-Csnake里,想直接打开整个工程直接进入Cnake,点击Csnake.sln打开  注意这里可能需要使用相关的IDE环境才能打开。 3.代码注释为全英文注释,若有疑问可借助百度翻译,或者看文档报告。 文档链接可直接百度云下载:链接:https://pan.baidu.com/s/1vnXkR8d9-
徐飞机
2018/05/15
4.4K0
用C语言实现经典游戏——贪吃蛇
该项目适合刚学完C语言结构体,有一定C语言基础的练习,该小项目可以帮助自己锻练的面向对象编程思想。
莫浅子
2023/10/17
5390
用C语言实现经典游戏——贪吃蛇
c语言及数据结构实现简单贪吃蛇小游戏
十进制颜色代码:void color(int c) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c); }
羑悻的小杀马特.
2025/01/23
1590
c语言及数据结构实现简单贪吃蛇小游戏
相关推荐
贪吃蛇小游戏程序(C语言)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验