C++实现简单贪吃蛇小游戏

本文实例为大家分享了C++实现简单贪吃蛇小游戏的具体代码,供大家参考,具体内容如下

1 贪吃蛇游戏原理

1.1 构造蛇身:定义一个坐标数组,存放的是蛇的每一节蛇身所在的坐标位置。

1.2 移动效果:每次移动时,将每一节蛇身(蛇头除外)依次往前移动一节,去掉蛇的最后一节,确定蛇的方向

1.3 移动判断:每次移动时,判断蛇头是否触碰食物,如果碰到了食物,只进行前移蛇身和增加蛇头的操作,不进行擦除蛇尾的操作

2游戏设计

2.1 游戏首页

2.2 开始游戏

2.3 退出游戏

3.游戏实现

3.1 游戏首页

void fist_show()
{
 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
 cout << "        贪吃蛇游戏       " << endl;
 cout << "                          " << endl;
 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN);
 cout << "*————————————*" << endl;
 cout << "*                        *" << endl;
 cout << "*                        *" << endl;
 cout << "*       1,游戏说明      *" << endl;
 cout << "*       2,开始游戏      *" << endl;
 cout << "*       3,结束游戏      *" << endl;
 cout << "*                        *" << endl;
 cout << "*                        *" << endl;
 cout << "*————————————*" << endl;
 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
 system("pause");
 system("cls");
}

游戏说明介绍

void game_instruction()
{
 color(5);
 cout << "*********游戏说明如下:***********" << endl;
 color(3);
 cout << "*                                *" << endl;
 cout << "*  使用↑.↓.←.→控制蛇的移动   *" << endl;
 cout << "*  不能咬到自己                  *" << endl;
 cout << "*  不能撞到墙                    *" << endl;
 cout << "*  按到空格键暂停游戏            *" << endl;
 color(5);
 cout << "**********************************" << endl;
 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
 system("pause");
 system("cls");
}

3.2 游戏开始

// 食物的坐标
struct food{
 int x;
 int y;
}food1;

//蛇的相关属性
struct snake {
 int speed;//蛇移动的速度
 int len;//蛇的当前长度
 int x[snake_length];//组成蛇身的每一个*中x的坐标
 int y[snake_length];//组成蛇身的每一个*中y的坐标

}snake1;

将光标移动到控制台的(x,y)坐标点处

//将光标移动到控制台的(x,y)坐标点处
void gotoxy(int x, int y)
{
 COORD coord;
 coord.X = x;
 coord.Y = y;
 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}

绘制地图

void creat_map()
{
 //打印上下边框
  for (int i = 0; i <= wide; i += 1)
  {
   //将光标移动依次到(i,0)处打印上边框
   gotoxy(i, 0);
   cout<<"*";
   gotoxy(i, hight);
   cout << "*";
  }

  //打印左右边框
  for (int i = 1; i < hight; i++)
  {
   //将光标移动依次到(0,i)处打印左边框
   gotoxy(0, i);
   cout << "*";
   gotoxy(wide, i);
   cout << "*";
  }
}

初始化蛇身和食物

void init()
{
//随机生成初始食物

  food1.x = rand() % (wide - 2) + 2;
  food1.y = rand() % (hight - 2) + 1;
  gotoxy(food1.x, food1.y);
  cout<<"★";
  //初始化蛇的属性
  snake1.len = 4;
  snake1.speed = 200;

  //在屏幕中间生成蛇头
  snake1.x[0] = wide / 2 + 2;//x坐标为偶数
  snake1.y[0] = hight / 2;
  //打印蛇头
  gotoxy(snake1.x[0], snake1.y[0]);
  cout<<"■";

  //生成初试的蛇身
  for (int i = 1; i < snake1.len; i++)
  {
   //蛇身的打印,纵坐标不变,横坐标为上一节蛇身的坐标值+2
   snake1.x[i] = snake1.x[i - 1] + 2;
   snake1.y[i] = snake1.y[i - 1];
   gotoxy(snake1.x[i], snake1.y[i]);
   printf("■");
  }

}

让蛇移动

void snake_move()
{
 int pre_key = key;
 key = _getch();

 *changeFlag为0表明此时没有吃到食物,因此每走一步就要擦除掉蛇尾,以此营造一个移动的效果
 *为1表明吃到了食物,就不需要擦除蛇尾,以此营造一个蛇身增长的效果
 */
 if (changeFlag == 0)
 {
  gotoxy(snake1.x[snake1.len - 1], snake1.y[snake1.len - 1]);
  cout<<"  ";//在蛇尾处输出空格即擦去蛇尾
 }

 //将蛇的每一节依次向前移动一节(蛇头除外)
 for (int i = snake1.len - 1; i > 0; i--)
 {
  snake1.x[i] = snake1.x[i - 1];
  snake1.y[i] = snake1.y[i - 1];
 }

 //蛇当前移动的方向不能和前一次的方向相反,比如蛇往左走的时候不能直接按右键往右走
 //如果当前移动方向和前一次方向相反的话,把当前移动的方向改为前一次的方向
 if (pre_key == 4 && key == 5)
 {
  key = 4;
 }

 if (pre_key == 5 && key == 4)
 {
  key = 5;
 }

 if (pre_key == 6 && key == 7)
 {
  key = 6;
 }

 if (pre_key == 7 && key == 6)
 {
  key = 7;
 }

 //判断蛇头应该往哪个方向移动
 switch (key)
 {
 case 4:
  snake1.x[0] -= 2;//往左
  break;
 case 5:
  snake1.x[0] += 2;//往右
  break;
 case 6:
  snake1.y[0]--;//往上
  break;
 case 7:
  snake1.y[0]++;//往下
  break;
 }
 //打印出蛇头
 gotoxy(snake1.x[0], snake1.y[0]);
 printf("■");
 gotoxy(wide - 2, 0);
 //由于目前没有吃到食物,changFlag值为0
 changeFlag = 0;
 return;
}

创造食物

void createFood()
{
 if (snake1.x[0] == food1.x && snake1.y[0] == food1.y)//蛇头碰到食物
 {
  //蛇头碰到食物即为要吃掉这个食物了,因此需要再次生成一个食物
  while (1)
  {
   int flag = 1;
   food1.x = rand() % (wide - 4) + 2;
   food1.y = rand() % (hight - 2) + 1;

   //随机生成的食物不能在蛇的身体上
   for (int i = 0; i < snake1.len; i++)
   {
    if (snake1.x[i] == food1.x && snake1.y[i] == food1.y)
    {
     flag = 0;
     break;
    }
   }
  }

  //绘制食物
  gotoxy(food1.x, food1.y);
  printf("★");

  snake1.len++;//吃到食物,蛇身长度加1
  sorce += 10;//每个食物得10分
  snake1.speed -= 5;//随着吃的食物越来越多,速度会越来越快
  changeFlag = 1;//很重要,因为吃到了食物,就不用再擦除蛇尾的那一节,以此来造成蛇身体增长的效果
 }
 return;
}

判断蛇的规则

//判断蛇运动是否符合规则
bool snakeStatus()
{
 //蛇头碰到上下边界,游戏结束
 if (snake1.y[0] == 0 || snake1.y[0] == hight)
  return false;
 //蛇头碰到左右边界,游戏结束
 if (snake1.x[0] == 0 || snake1.x[0] == wide)
  return false;
 //蛇头碰到蛇身,游戏结束
 for (int i = 1; i < snake1.len; i++)
 {
  if (snake1.x[i] == snake1.x[0] && snake1.y[i] == snake1.y[0])
   return false;
 }
 return true;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C++实现简单贪吃蛇游戏

    我大概在一个多月前把自己上学期写的c代码的贪吃蛇游戏push到csdn上,并且说c风格的贪吃蛇写起来有些麻烦(贪吃蛇游戏的c语言实现),准备用面向对象的c++再写一遍.现在我们专业恰好刚教完了c++,学校也布置了一道简单的贪吃蛇的编程题目,实现下来,的确觉得c++的思路清晰很多,所以再次把c++的代码push上来,供大家对比参考:) 直接上代码,c++把整个游戏拆分成几个文件,分开上,有一定的c++基础的同学应该可以很容易看懂. 1.全局头文件(global.hpp) #ifndef _GLOB

  • C/C++实现贪吃蛇逐步运动效果

    本文实例为大家分享了C/C++实现贪吃蛇逐步运动效果的代码,供大家参考,具体内容如下 主要使用结构数组和结构指针,再用easyx图形库进行的绘图,以供讨论和学习 #include <conio.h> //建立储存蛇身的结构体 struct snack { int x; int y; }; //决定方向 int fangxiang=3;//w=0,s=1,a=2,d=3 // 按键变量 char anjian=0; //调整坐标关系 int tiaozheng(struct snack *a);

  • 利用C/C++实现较完整贪吃蛇游戏

    记得在大一时刚学习c/c++语言,学到一半突然想用这门语言做一些小游戏出来,首先想到的便是贪吃蛇.于是本人利用空余时间写出了这么一个简单的小游戏. 由于当时的我还没有能力构造出用户界面,故直接使用dos界面运行.那么问题来了,如何让一个字符在dos界面上自由移动???对于这个问题我采用的解决方案是实现gotoxy函数来控制指针位置从而实现字符的移动.那么我们就先来实现这个函数. gotoxy 函数并非系统函数,我将其储存于 gotoxy.h 的头文件中方便调用. gotoxy.h #includ

  • C++代码实现贪吃蛇小游戏

    本文实例为大家分享了C++实现贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 1.游戏描述 贪吃蛇可谓是从小玩到大的经典趣味小游戏,蛇每吃到一次食物,身体就会长一节,如果撞到墙或者撞到自身,游戏结束. 2.代码实现 1.首先需要思考的问题是如何指定位置输出字符?这时候就有一个非常强大的函数叫 gotoxy() ,现在库函数里边已经没有了,只能我们自己实现,代码中注释很完整,自行阅读即可. 2.实现了指哪画哪的目标之后,就可以开始游戏内容制作了.首先便是圈地,即画地图,一个简简单单的循环就能安排

  • C++基于控制台实现的贪吃蛇小游戏

    本文实例讲述了C++基于控制台实现的贪吃蛇小游戏.分享给大家供大家参考.具体实现方法如下: #include <windows.h> #include <time.h> #include <stdio.h> #define MAX 100 #define UP 1 #define DOWN 2 #define LEFT 3 #define RIGHT 4 #define MOVING 5 #define STOP 0 HANDLE hMain_Out = NULL; H

  • C++控制台实现贪吃蛇游戏

    本文实例为大家分享了C++实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下 刚学完了C语言,便尝试的写了贪吃蛇的代码,但是效果不佳,很多的bug,所以,这个学了C++,便重新的写了这个小游戏,用类来封装! 先是头文件: struct Snake { int x, y; }; class snake { public: snake() //构造函数 { length = 3; s[2].x = 10; s[2].y = 10; s[1].x = 9; s[1].y = 10; s[0].x =

  • C++ vector容器实现贪吃蛇小游戏

    本文实例为大家分享了C++ vector容器 实现贪吃蛇,供大家参考,具体内容如下 使用vector容器实现贪吃蛇简化了很多繁琐操作,且相比之前我的代码已经做到了尽量的简洁 技术环节: 编译环境:windows VS2019 需求: 控制贪吃蛇吃食物,吃到一个食物蛇身变长一节,得分增加,撞墙或撞自己则游戏结束. 思路: 创建一个vector容器,容器内存储蛇的每节身体的结构变量,结构变量中保存蛇身体的xy坐标,通过使用vector成员方法不断添加和删除容器中的数据,实现蛇坐标的规律移动,吃到食物

  • C++结构体数组实现贪吃蛇

    本文实例为大家分享了C++结构体数组实现贪吃蛇的具体代码,供大家参考,具体内容如下 代码: #include<bits/stdc++.h> #include<windows.h> #include<conio.h> using namespace std; const int h=50,w=50,MaxLen=400; void gotoxy(short y,short x)//光标移动函数 { COORD pos={x,y}; SetConsoleCursorPosi

  • 贪吃蛇游戏C++命令行版实例代码

    本文实例讲述了贪吃蛇游戏C++命令行版的实现代码,是非常经典的游戏.分享给大家供大家参考.具体实现方法如下: 众所周知,贪吃蛇游戏是经典的计算机游戏. 游戏描述如下: 1. 贪吃蛇可以自动直线前进,或者玩家可以通过方向键操纵贪吃蛇上下左右前进,每次前进一格. 2. 贪吃蛇在规定的区域内活动,当: ①贪吃蛇触碰到墙壁时: ②贪吃蛇的蛇头触碰到蛇身或者蛇尾时: ③玩家的键盘输入不是方向键时: 命令行显示"Game Over!"并且退出游戏. 3. 贪吃蛇活动的区域内每次随机产生一颗&quo

  • C++实现简单贪吃蛇小游戏

    本文实例为大家分享了C++实现简单贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 1 贪吃蛇游戏原理 1.1 构造蛇身:定义一个坐标数组,存放的是蛇的每一节蛇身所在的坐标位置. 1.2 移动效果:每次移动时,将每一节蛇身(蛇头除外)依次往前移动一节,去掉蛇的最后一节,确定蛇的方向 1.3 移动判断:每次移动时,判断蛇头是否触碰食物,如果碰到了食物,只进行前移蛇身和增加蛇头的操作,不进行擦除蛇尾的操作 2游戏设计 2.1 游戏首页 2.2 开始游戏 2.3 退出游戏 3.游戏实现 3.1 游戏首

  • C语言实现简单贪吃蛇小游戏

    本文实例为大家分享了C语言实现简单贪吃蛇的具体代码,供大家参考,具体内容如下 依然是非常传统的贪吃蛇小游戏,网上很多教程,配置好ege图形库就好,不然没有grapics.h另外,还需要添加snakes.h,直接上代码吧,注释很详细了.觉得难度有一部分来源于配置图形库. snakes.h void welcome(); void initSnake(); void createPoint(); void drawSnake(); void drawRandomPoint(); void view(

  • 原生js实现简单贪吃蛇小游戏

    本文实例为大家分享了js实现贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 先上图 话不多说,代码奉上,喜欢的请留下你的小星星♥(ˆ◡ˆԅ) <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial

  • java实现简单贪吃蛇小游戏

    本文实例为大家分享了java实现贪吃蛇小游戏,供大家参考,具体内容如下 有两个类,放在同一文件下下即可,背景图片,标题,蛇尾可自行更改 import java.awt.*; import javax.swing.*; import java.awt.event.*; public class MyJFrame extends JFrame{ public MyJFrame() { int x= Toolkit.getDefaultToolkit().getScreenSize().width;

  • JS实现简单贪吃蛇小游戏

    本文实例为大家分享了JS实现简单贪吃蛇游戏的具体代码,供大家参考,具体内容如下 1.使用语言 HTML+CSS+JavaScript 2.使用工具 visual studio code 3.GitHub项目地址:贪吃蛇 4.项目运行截图: 5.项目功能分析:主要使用数组来存储蛇的位置,地图和蛇都是一个二维数组,对于有蛇的地方,地图的CSS就会发生改变,同时添加了添加了一个音乐播放按钮,通过CSS动画实现旋转. 6.项目代码:(项目代码有详细的注释) snake.html <!-- * @Auth

  • python实现简单贪吃蛇小游戏

    本文实例为大家分享了python实现简单贪吃蛇的具体代码,供大家参考,具体内容如下 1. 导入游戏库 import pgzrun import random 2.游戏初始化 # 窗口大小 WIDTH = 600 HEIGHT = 480 # 贪吃蛇 bodys = [ [100,100],[80,100], [60,100], [40,100], [20,100]] head = [100,100] d = 'right' # 食物 food = [290,290] # 得分 score=0 3

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

    本文实例为大家分享了C语言实现简单贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 #温馨提示:以下设计在VS2019下完美运行,完整代码附在末尾,供大家学习参考 (1)游戏进入界面(动态读取以及温馨提示) void loading()//动态加载图 { int j; gotoxy(43, 11); printf("Loading..."); gotoxy(39, 13); printf("□□□□□□□□"); gotoxy(39, 13); for (j = 8

  • Java实现简单的贪吃蛇小游戏

    本文实例为大家分享了Java实现简单的贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 1. 程序结构 程序结构图如图: 2. 程序设计思路 2.1 Data类 作用:连接statics文件夹,将静态资源包中的图片转化为图标 方便在面板上绘制. 实现:使用class.getResource(String path)方法. 代码如下: package com.snake; import javax.swing.*; import java.net.URL; public class Data {

  • 用Python简单实现个贪吃蛇小游戏(保姆级教程)

    一.前言 本期介绍 Python 练手级项目--贪吃蛇! 原本想推荐一个贪吃蛇的开源项目:python-console-snake,但由于该项目最近一次更新是 8 年前,而且在运行的时候出现了诸多问题.索性我就动手用 Python 重新写了一个贪吃蛇游戏. 下面我们就一起用 Python 实现一个简单有趣的命令行贪吃蛇小游戏,启动命令: git clone https://github.com/AnthonySun256/easy_games cd easy_games python snake

  • 用js编写简单的贪吃蛇小游戏

    本文实例为大家分享了js编写简单的贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 代码如下: HTML 5 部分 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta n

随机推荐