c++实现超简单的贪吃蛇游戏实例介绍

目录
  • 设计思路
  • 实现代码
  • 效果

设计思路

        建议先将代码复制下来跑一遍再来看思路!!!

        通俗易懂,请仔细看。

        值得注意的是我给出的代码没有加墙体,如有需要自己添加。

        也没有难度设计,同上。

地图大小(这里设计了墙体,代码中未实现)

设置一个整形数组map,其大小为1600,对应着地图的大小为1600,并初始化数组,令数组中的值全为0,0代表空地。

我们通过设定窗口的宽度为80,打印时每个map[i] 所对应的字符占两格位置即可实现每打印40个map[i]就换行的效果。

这样地图的长宽即为40x40.

      2.墙体

墙体在地图的最外围,意味着当map[i]中的i为地图边界时,对应着墙体,使用if语句判断i的值,符合位于边界的条件打印墙体即可。

通过地图的大小我们了解到,当0<=i<=39时,map[i]对应着第一行,也就是地图的边界 ,同样的,地图左边界的i满足i%40==0,右边界的i满足(i+1)%40==0,,同理下边界。将上述符合的条件放入if语句中即可实现打印墙体的功能。

        3.蛇

蛇是如何移动呢?并且保持一定长度。其实我们只需要一个蛇头就可以办到,因为蛇身只是旧蛇头的位置,所以我们一直只需更新蛇头坐标就能达到目的,如何保持长度呢?,因为我们更新新的蛇头,去掉旧的蛇尾是很显然的事了,在地图大小中我们提到,map[i] 如果等于0,就是空地,让蛇尾的值变成0就行了,因为蛇一直在移动,所以当前蛇尾的前一节蛇身会是下一刻的蛇尾,很自然的联想到了以1为公差的一组数1234,分别对应蛇身的值,如果我们想使蛇连续的动起来,新蛇头的值为4,在加入新蛇头前将蛇尾变为0,蛇尾前一节蛇身变为此刻蛇尾对应的值为1,使蛇整体减去1,此时的蛇的值为0123,加入蛇头4,01234,此刻原蛇尾变为空地,原蛇尾前一截蛇身变为此刻的蛇尾。贪吃蛇的持续移动便完成了。

       4.食物

很自然的,在上面3节map[i]为0,正整数时都有了对应的含义,食物我们便使其 map[i] =-1.因为贪吃蛇游戏中食物的生成要求是随机的,但我们的c++课程中并没有提到,便在网上查找到了随机数生成的函数srand(上面的设定窗口大小也是如此),生成的随机数i可能超出数组大小,对i取1600的余数即可。食物只能生成在空地上,当map[i]等于0时,令map[i]=-1。新的食物便生成了。容易忽略的一点是,我们并没有给墙体map[i]的值,也就是所墙体的值在数组中对应的是空地,只不过通过i的位置来判断是否为墙体,在这里,同样也要加入墙体的位置到判断条件,以免食物生成在墙体内。新的食物在旧的食物被吃掉后立即生成。

      5.死亡判定

我们通过新蛇头所对应的值来判断蛇是否死亡

        (1)map[headx+heady*40]>0, 由3我们可以知道,蛇身所对应的map [i]  值大于0,新蛇头所对应的map值大于0也就意味着新蛇头在蛇身生成,按

照贪吃蛇的规则,游戏结束

       (2)(headx+heady*40)满足墙体的打印条件时,意味着蛇头在墙体生成,游戏结束

实现代码

#include<bits/stdc++.h>
#include<windows.h>
#include<iostream>
#include<conio.h>
int main() {
    int headx = 0, heady = 0, len = 5, map[1600] = { 0 }, i = 0;
    char c = 'd', cl = 'd',body=3,head=2;
    /*随机数生成*/
    srand((unsigned)time(0));
    system("mode con:cols=80 lines=40");
    map[rand() % 1600] = -1;
    while (true)
    {
        if (_kbhit())//判断键盘输入
        {
            cl =_getch();
            if (cl < 97) cl += 32;
            if (cl == 'a' && c != 'd' || cl == 'd' && c != 'a' ||cl == 'w' && c != 's' || cl == 's' && c != 'w')//判断输入方向是否与原方向冲突
                c = cl;
        }
        /*改变蛇头坐标*/
        if (c == 'a') headx--;
        if (c == 'd') headx++;
        if (c == 'w') heady--;
        if (c == 's') heady++;
        /*判断蛇头是否撞墙*/
        if(headx==-1||headx==40||heady==-1||heady==40)
            break;
        /*判断蛇头是否为空地*/
        if (map[heady * 40 + headx])
        {
            if (map[heady * 40+headx] > 0) break;
            /*吃到食物,蛇身+1,并在空地生成新的食物*/
            if (map[heady * 40 + headx] < 0)
            {
                len++;
                for (i = rand() % 1600; map[i] || !(map[i] = -1); i = rand() % 1600);
            }
        }
        /*是空地则蛇身值整体减1,蛇尾由1减为0变成空地*/
        else for (i = 0; i < 1600; i++)
        {
            if (map[i] > 0) map[i] -= 1;
        }
        system("cls");
        /*新蛇头赋值,遍历map,值大于0为蛇身,等于0为空地,小于0为食物*/
        for (map[heady * 40 + headx] = len, i = 0; i < 1600; i++)
        {
            if (map[i] == len) {
                printf("%2d", map[i]);
                continue;
            }
            if (map[i] > 0)  printf("%2d", map[i]);
            if (map[i] == 0)  printf("%2d", map[i]);
            if (map[i] == -1) printf("%2d", map[i]);//打印
         }
        Sleep(100);
    }
}

效果

 如果你仔细阅读了代码,将数字替换成你想要的符号(占两个字符大小如果是一个字符要加一个空格)是很简单的事情

如果你想要游戏循环进行,也是很容易办到的。

这只是个demo,你可以根据自己的需要任意的改写。

到此这篇关于c++实现超简单的贪吃蛇游戏实例介绍的文章就介绍到这了,更多相关c++贪吃蛇游戏内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

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

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

  • C++ 情怀游戏贪吃蛇的实现流程详解

    还记我们童年时的贪吃蛇吗,用"砖头"诺基亚玩的更是经典中的经典,贪食蛇操作简单,可玩性比较高.这个游戏难度最大的不是蛇长得很长的时候,而是开始.那个时候蛇身很短,看上去难度不大,却最容易死掉,因为把玩一条小短蛇让人容易走神,失去耐心.由于难度小,你会不知不觉加快调整方向的速度,在游走自如的时候蛇身逐渐加长了,而玩家却没有意识到危险,在最得意洋洋的一刻突然死亡. 1976年,Gremlin平台推出了一款经典街机游戏Blockade.游戏中,两名玩家分别控制一个角色在屏幕上移动,所经之处砌

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

    C++实现建议贪吃蛇(不会闪屏幕) 使用vs2013完成.记录踏上游戏开发的道路. 效果图 代码 // 2021.7.24.1贪吃蛇.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include <list> #include <numeric> #include <algorithm> #include <Windows.h> #includ

  • 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++实现贪吃蛇游戏

    一.基本思路 制作贪吃蛇游戏,首先必须要有的材料是蛇和得分的食物:其次是游戏逻辑,1.要能使用键盘控制蛇的移动:2.食物被吃掉要能再次生成并且蛇要做出相应变化:3.蛇咬到自己的身体和墙会死亡:最后是图形界面的显示. 二.蛇和食物 蛇和食物使用结构体来储存,代码比较简单. #include <graphics.h> #include <stdio.h> #include <time.h> #include <conio.h> #define SIZE 30 #

  • 基于easyx的C++实现贪吃蛇

    本文实例为大家分享了基于easyx的C++实现贪吃蛇的具体代码,供大家参考,具体内容如下 本代码来自于easyx讨论群的分享 先上效果图,其实也只是画了简单的圈圈代表蛇和食物,背景就是黑色的. #include "stdafx.h" #include <iostream> #include <stdlib.h> #include <time.h> #include <conio.h> #include <graphics.h>

  • C++入门指南之贪吃蛇游戏的实现

    目录 参考 贪吃蛇游戏 程序框架 绘制游戏地图和蛇 小蛇向右移动 控制小蛇4个方向移动 时间控制的改进 失败判断与显示 添加食物 完整代码 总结 参考 <C和C++游戏趣味编程> 贪吃蛇游戏 键盘控制小蛇上.下.左.右移动,迟到食物后长度加1:蛇头碰到自身或窗口边缘,游戏失败 程序框架 #include <graphics.h> #include <conio.h> #include <stdio.h> // 全局变量定义 void startup() //

  • C++控制台循环链表实现贪吃蛇

    本文实例为大家分享了C++控制台循环链表实现贪吃蛇的具体代码,供大家参考,具体内容如下 -stdafx.h 为了简化程序定义一些宏和全局变量 #ifndef __STDAFX_H__ #define __STDAFX_H__ // ============上下左右============= const int UP = 72; const int DOWN = 80; const int LEFT = 75; const int RIGHT = 77; // ==============宽高==

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

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

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

    利用C/C++实现贪吃蛇 (注意:本文章仅供参考,第一次写博客还请多多指教.理解本文章需要easyx和c++等基础知识,并且需要了解贪吃蛇游戏机制) 贪吃蛇机制介绍 相信绝大多数人都曾玩过或者了解过贪吃蛇这款经典的游戏.贪吃蛇顾名思义,就是让蛇尽可能的吃食物.玩家可通过方向键或自定义键来控制蛇头的方向,使它吃到地图出现的随机食物.蛇每吃到一个食物,自身便会增长.当蛇碰到地图的边界或是蛇碰到自身,蛇便会死亡,游戏便结束. 机制大概了解过后,我们将考虑如何实现这类游戏. 设计与分析 首先,我们分析游

  • C++通过类实现控制台贪吃蛇

    本文实例为大家分享了C++实现控制台贪吃蛇的具体代码,供大家参考,具体内容如下 初学c++,算刚学完类吧,写个贪吃蛇来玩玩. 现是头文件 #pragma once #ifndef SNACK_H #define SNACK_H #define Frame_X 5//边框起点横坐标 #define Frame_Y 5//边框起点纵坐标 #define Frame_width 50//边框长度 #define Frame_height 25//边框高度 struct point//蛇个点坐标 { i

  • 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

随机推荐