你是新手上路,C++学了一段时间了的小白吗?还在为学会了一些编程代码却不知如何应用而发愁吗?还在为自己代码能力有限不知道如何编写游戏而忧虑吗?不急,我们慢慢来,教你一步一步编写游戏代码,从零开始也能学会制作游戏!


一、前言

设置一个游戏之前,最重要的是要构思,具有全局思维,思考我们要游戏实现的功能是什么。对于贪吃蛇,我们要实现的就是实现“蛇”的移动,和“食物”的变化,并计算吃掉的“食物”的数量,也即是死亡之后的分数。明细这个核心功能后,我们就可以开始编写程序了。

二、代码实现

第一步:游戏界面

进入游戏,首先得有游戏界面开始才行,在这里我们可以利用打印图形的方法,打印出来即可。如下图:

第二步:围墙的设置

贪吃蛇移动得要有个范围,不能让它满屏跑,不撞墙它不死,那就成了bug。这里我们设置围墙也只用把四边打印出来,围成长方形即可。

第三步:贪吃蛇的设置与移动

这里的贪吃蛇,我们设置成几个“■”连接成的方块。要使它移动,我们只用设置死循环,使贪吃蛇的“■”不断往前一个位置移动。同时设置读取键盘的输入,该变其方向。

第四步:食物的设置

这里我们食物用"⊙"表示,把它设置成随机,用rank()函数即可。

第五步:得分的计算

当蛇撞墙时,我们就需要用if语句判断一下,输出分数。这里使用score计数,每吃掉一个“食物”就加十分。

第六步:完善代码

在运行中,我们设置了光标“-”的位置,避免从键盘读取贪吃蛇位置时,光标也随之移动。对于初学者来说,这部分代码可能有些生僻,不过,不使用这部分代码也是不影响游戏功能实现的。

三、完整代码

代码如下:

     #include<stdio.h>#include<Windows.h>//system#include<time.h>//time#include<conio.h>//kbhitchar dir = 1;//方向int snake_x[1005], snake_y[1005], snake_len, head = 2, score = 0;int food_x, food_y;//食物的坐标void gotoxy(int x, int y){ //将光标移动到x,y坐标COORD pos;HANDLE hOutput;pos.X = x;pos.Y = y;hOutput = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hOutput, pos);}void gotoprint(int x, int y){gotoxy(x, y); printf("■");}void creatgraph() {for (int i = 0; i<58; i += 2) { //打印上下边框gotoprint(i, 0);//打印第一行gotoprint(i, 26);//打印最后一行}for (int i = 1; i < 26; i++) { //打印左右边框gotoprint(0, i);//打印第一列gotoprint(56, i);//打印最后一列}gotoprint(14,15);gotoprint(14,16);gotoprint(14,17);snake_x[2] = 14; snake_y[2] = 15;//初始化蛇的坐标snake_x[1] = 14; snake_y[1] = 16;snake_x[0] = 14; snake_y[0] = 17;}void welcome() {gotoxy(15,6);  printf("/**********************************************/\n");gotoxy(15,8);  printf("/*                                            */\n");gotoxy(15,10); printf("/*        欢迎来到  贪吃蛇小游戏 !            */\n");gotoxy(15,12); printf("/*                                            */\n");gotoxy(15,14); printf("/**********************************************/\n\n\n\n\n\n");system("pause"); system("cls");//清除屏幕}void gotodelete(int x, int y){//清楚x,y坐标的内容gotoxy(x, y); printf("  ");}void creatfood() {//创建食物while (1) {food_y = rand() % (25) + 1;//控制食物不超出边界food_x = rand() % (53) + 2;if (food_x % 2 != 0) food_x = food_x+1;int flag = 0;for (int i = head; i > head - snake_len; i--) {//判断食物的坐标与蛇的坐标是否重合if (snake_x[i] == food_x && snake_y[i] == food_y) flag = 1;}if (!flag) break;}gotoxy(food_x, food_y); printf("⊙");}void Running() {//游戏引擎int snake_len = 3, tx, ty;//下一步的坐标creatfood();while(1) {if (_kbhit()) dir = _getch();//从键盘上获取按键if (dir == 'w') {//上tx = snake_x[head];ty = snake_y[head] - 1;}else if (dir == 's') {//下tx = snake_x[head];ty = snake_y[head] + 1;}else if (dir == 'a') {//左tx = snake_x[head] - 2;ty = snake_y[head];}else if (dir == 'd') {//右tx = snake_x[head] + 2;ty = snake_y[head];}else continue;//按其他任意键暂停if (tx < 1 || tx > 54 || ty < 1 || ty > 25) break;//达到边界就退出int judge=0;          //吃到自己就退出for(int i=head-1;i>head-snake_len;i--) if (snake_x[head]==snake_x[i]&&snake_y[head]==snake_y[i]) judge=1;if(judge) break;     //吃到自己就退出(细心的读者提出的Bug,修改啦~) if (tx == food_x && ty == food_y) {score += 10; snake_len++; creatfood();//重新随机食物}else gotodelete(snake_x[head-snake_len+1], snake_y[head-snake_len+1]);head++;snake_x[head] = tx;snake_y[head] = ty;gotoprint(tx, ty); gotoxy(0, 27);//消除光标干扰Sleep(200);//暂停200毫秒}system("cls");//清除屏幕gotoxy(40, 10); printf("Game Over!  Your Score is: %d\n", score);system("pause");}int main() {system("color 0B");//改变字体颜色welcome();creatgraph();Running();return 0;}

四、总结

代码实现的难点主要在三个方面,一是光标的设置,二是读取键盘输入,实现对贪吃蛇的方向控制,三是设置“食物”的出现。但仔细阅读代码以及查阅资料,相信小白门也能入门,体会到编写代码的乐趣啦。
当然代码也可以进一步改进,如美化界面,加上图片等,就有待各位读者发挥自己的代码能力去改善了。

C++简单贪吃蛇游戏——入门游戏编程(详细)相关推荐

  1. 基于C语言Ncurse库和链表的简单贪吃蛇小游戏

    参考:基于C语言Ncurse库和链表的简单贪吃蛇小游戏 作者:三速何时sub20 发布时间:2020-09-29 10:23:51 网址:https://blog.csdn.net/weixin_44 ...

  2. 完整版! 大一新手C语言数据结构实现简单贪吃蛇游戏

    大一新手C语言数据结构实现简单贪吃蛇游戏含源代码 贪吃蛇 1.前言简述 2.编写语言及工具 3.游戏的头文件代码(.h) 3.1map.h 3.2snake.h 3.3Food.h 4.游戏的源文件代 ...

  3. html与js简单小游戏,JS实现简单贪吃蛇小游戏

    本文实例为大家分享了JS实现简单贪吃蛇游戏的具体代码,供大家参考,具体内容如下 1.使用语言 HTML+CSS+JavaScript 2.使用工具 visual studio code 3.GitHu ...

  4. html5小游戏 typescript,使用TypeScript和Canvas编写移动端贪吃蛇大作战游戏

    基本介绍 一款移动端贪吃蛇大作战游戏.(只支持移动端) 这是一个临近 deadline 的课设项目,为了方便地使用TS,我直接使用angular-cli生成了TypeScript的项目结构.如果你有好 ...

  5. 贪食蛇php,贪吃蛇网页小游戏的代码

    贪吃蛇网页小游戏的代码 ::selection { color:#FFFFFF; background:transparent; } ::-moz-selection { color:#FFFFFF; ...

  6. 用前端技术实现贪吃蛇的小游戏

    用前端技术实现贪吃蛇的小游戏 前言 游戏功能 游戏设计 游戏主页代码 游戏中的js代码(snake.js) 游戏运行界面 前言 周末大热天窝在家里无聊,想温习一下前端开发,所以用javascript ...

  7. 贪吃蛇c语言 游戏中会出现障碍物,贪吃蛇C语言游戏代码.doc

    贪吃蛇C语言游戏代码 //开始编写游戏需要的类 #include //EasyX_2011惊蛰版(绘图库) #include #include #include #define UP1 #define ...

  8. 简单贪吃蛇c语言代码,一个C语言写简单贪吃蛇源代码.doc

    一个C语言写简单贪吃蛇源代码 #include #include #include #include #include #include int grade=5,point=0,life=3; voi ...

  9. php 实现贪吃蛇游戏,C++实现简单贪吃蛇游戏

    我大概在一个多月前把自己上学期写的c代码的贪吃蛇游戏push到csdn上,并且说c风格的贪吃蛇写起来有些麻烦(贪吃蛇游戏的c语言实现),准备用面向对象的c++再写一遍.现在我们专业恰好刚教完了c++, ...

最新文章

  1. SAP MM MB21创建预留单据时候M标记能否自动勾选?
  2. 当世界模型被用于sim2real:机器人通过视觉想象和交互尝试来学习
  3. 【原创】RabbitMQ 之 Access Control(翻译)
  4. sdutoj-4209-移动小球
  5. 年轻群体当道,哈弗F7如何赢得芳心?
  6. eclipse / 绑定 OpenJDK 1.8 Java 源码的方法
  7. Python多任务(8.进程与线程之间的区别以及多进程和多线程的区别 )
  8. 关于调用Oracle存储过程时发生“BCD Overflow”错误的处理
  9. 那个陪你聊微信、发自拍的妹子,可能不是人
  10. 京东炸年兽活动一键做任务工具v1.7
  11. 红黑树 键值_Java集合框架:红黑树概念、插入及旋转操作详细解读就问你会不会...
  12. 【单片机基础篇】三极管
  13. map函数的用法python,详解Python map函数及Python map()函数的用法
  14. 数据结构之-冒泡排序
  15. Unity中Transform和rotation相关小知识点
  16. windows11专业工作站版
  17. up考研资料更新目录
  18. 即使不提供被告身份证信息,法院也必须受理立案
  19. iOS 实现 WiFi 局域网传输文件到 App
  20. 浅析信号与系统1(指数信号与正弦信号)

热门文章

  1. MindMapper中的分支格式怎样进行修改
  2. 5种数据分析常用的思维方法!
  3. win7产生大量evtx文件_Windows XML Event Log (EVTX)单条日志清除(四)——通过注入获取日志文件句柄删除当前系统单条日志记录...
  4. 三元简化模型,助你加速团队成长
  5. 图像RGB值、灰度值、像素值的关系
  6. SQLServer数据库安全规划全攻略(转)
  7. 第33篇 Android Studio实现五子棋游戏(四)棋子类和主类
  8. Cannot install under Rosetta 2 in ARM default prefix|Mac问题已解决
  9. Eclipse时区出问题,与北京时间相差八小时
  10. LTE -UL_grant中RIV的编码和解码