当前位置: 首页 > news >正文

dede网站根目录标签站长工具爱站

dede网站根目录标签,站长工具爱站,个人网站用什么服务器,商城网站设计公司有哪些一、引言 贪吃蛇,这款经典的电子游戏,自1976年诞生以来,一直受到全球玩家的喜爱。它的规则简单,玩法直观,但同时也充满了挑战性。在这篇文章中,我们将一起探索如何开发一个贪吃蛇游戏,无论是作为…

一、引言

        贪吃蛇,这款经典的电子游戏,自1976年诞生以来,一直受到全球玩家的喜爱。它的规则简单,玩法直观,但同时也充满了挑战性。在这篇文章中,我们将一起探索如何开发一个贪吃蛇游戏,无论是作为编程新手的练手项目,还是作为游戏开发爱好者的娱乐之作,都是一个不错的选择。

二、贪吃蛇游戏基本规则

游戏规则

  1. 游戏目标:控制一条蛇在屏幕上移动,吃掉出现的食物,每吃一个食物,蛇的长度就会增加一节。
  2. 控制方式:通过键盘的上下左右键控制蛇的移动方向。
  3. 游戏结束条件:蛇撞到屏幕边界或者自己的身体时,游戏结束。

基本思路

  • 使用数组或链表来表示蛇的身体。
  • 通过改变蛇头的位置来控制蛇的移动。
  • 使用随机数来生成食物的位置。
  • 检测蛇头与食物、墙壁和自身身体的碰撞。

三、代码

首先绘制一个范围,确定面积多大

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
#include<conio.h>//设置地图边界
#define  W  120
#define  H  30//测试Ui界面多大
void text_ui()
{for (int i = 0;i < H; i++){for (int j = 0;j < W; j++){printf("=");}printf("\n");}
}int main()
{text_ui();return 0;}

得到结果如下:

 整个游戏复制以下代码运行即可:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
#include<conio.h>//设置地图边界
#define  W  120
#define  H  30//设置贪吃蛇结构体
typedef struct _body
{int x;    //坐标xint y;    //坐标y
}BODY;typedef struct snake
{BODY list[W*H];     //贪吃蛇最大沾满整个地图int size;           //实际身体个数。蛇头 @,蛇身 *BODY food;          //食物 #COORD coord;        //定位光标int dx;             //移动方向int dy;             //移动方向BODY tail;          //记录蛇尾(用于清除蛇尾痕迹)int score;          //记录分数
}SNAKE;//食物函数
void init_food(BODY* food)
{//设置随机数种子srand(time(NULL));//设置食物坐标food->x = rand() % (W - 1) +1;food->y = rand() % (H - 1) +1;
}//初始化蛇的函数
void init_snake(SNAKE *snake)
{//设置蛇头与蛇尾的位置snake->list[0].x = W / 2;snake->list[0].y = H / 2;snake->list[1].x = W / 2  - 1;snake->list[1].y = H / 2  - 1;snake->size = 2;//设置移动方向snake->dx = 1;snake->dy = 0;snake->score = 0;//设置食物位置init_food(&(snake->food));
}
//展示UI函数
void show_ui(SNAKE* snake)
{//显示蛇for (int i = 0;i < snake->size;i++){snake->coord.X = snake->list[i].x;snake->coord.Y = snake->list[i].y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), snake->coord);if (i == 0) //显示蛇头{printf("@");}else{printf("*");}}//显示食物snake->coord.X = snake->food.x;snake->coord.Y = snake->food.y;//定位光标位置SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), snake->coord);printf("#");//清除蛇尾痕迹snake->coord.X = snake->tail.x;snake->coord.Y = snake->tail.y;//定位光标位置SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), snake->coord);printf(" ");}
void show_wall()
{for (int i = 0;i <= H; i++){for (int j = 0;j <= W; j++){if (i == 0 || j == 0 || i == H || j == W){printf("+");}else{printf(" ");}}printf("\n");}
}
/*
测试Ui界面多大
void text_ui()
{for (int i = 0;i < H; i++){for (int j = 0;j < W; j++){printf("=");}printf("\n");}
}
*/void hide_cur()//隐藏光标
{CONSOLE_CURSOR_INFO cci;cci.dwSize = sizeof(cci);cci.bVisible = FALSE;SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci);
}void move_snake(SNAKE* snake)   //移动函数
{snake->tail = snake->list[snake->size - 1];for (int i = snake->size - 1; i > 0; i--){snake->list[i] = snake->list[i - 1];}snake -> list[0].x += snake->dx;snake -> list[0].y += snake->dy;
}void contorl_snake(SNAKE *snake)
{char key=0;while (_kbhit()) //判断是否按下按键,按下不等于0{key = _getch();}switch (key){case'w':snake -> dy = -1;snake -> dx = 0;break;case's':snake->dy = 1;snake->dx = 0;break;case'a':snake->dy = 0;snake->dx = -1;break;case'd':snake->dy = 0;snake->dx = 1;break;}}void snake_eat_food(SNAKE* snake)   //吃食物函数
{if (snake->list[0].x== snake->food.x && snake->list[0].y == snake->food.y){snake->size++;init_food(&(snake->food));snake->score += 10;}
}void game_over(SNAKE *snake)
{snake->coord.X = 110;snake->coord.Y = 65;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), snake->coord);printf("游戏结束,总分数:%d\n", snake->score);
}void start_game(SNAKE *snake)
{while (snake->list[0].x>0 && snake->list[0].x<W &&snake->list[0].y>0 && snake->list[0].y < H){show_ui(snake);    //显示蛇和食物contorl_snake(snake);  //控制蛇snake_eat_food(snake);  //判断是否吃到食物move_snake(snake);   //移动蛇Sleep(100);     //延时100毫秒}game_over(snake);
}int main(int argc, char* argv[])
{hide_cur();        //隐藏光标//text_ui();SNAKE* snake = (SNAKE*)malloc(sizeof(SNAKE));init_snake(snake); //初始化show_wall();       //显示墙start_game(snake);free(snake);while (1);return 0;
}

代码解析

  1. 头文件包含

    • stdio.h:标准输入输出头文件。
    • string.h:字符串操作头文件。
    • stdlib.h:标准库头文件,包含内存分配等函数。
    • time.h:时间操作头文件,用于生成随机数。
    • windows.h:Windows API 头文件,用于控制台操作。
    • conio.h:控制台输入输出头文件,用于非缓冲输入。
  2. 宏定义

    • W 和 H 分别定义了游戏地图的宽度和高度。
  3. 结构体定义

    • BODY:用于存储蛇的身体部分的坐标。
    • SNAKE:包含蛇的身体、食物、方向、分数等信息。
  4. 函数定义

    • init_food:初始化食物的位置。
    • init_snake:初始化蛇的位置和方向。
    • show_ui:显示蛇和食物。
    • show_wall:显示游戏的边界。
    • hide_cur:隐藏控制台光标。
    • move_snake:根据蛇的方向移动蛇的身体。
    • contorl_snake:通过键盘输入控制蛇的移动方向。
    • snake_eat_food:判断蛇是否吃到食物,并更新蛇的长度和分数。
    • game_over:游戏结束时显示分数。
    • start_game:游戏的主循环,控制游戏的流程。
  5. 主函数

    • main:程序的入口点,初始化游戏,隐藏光标,显示边界,并开始游戏循环。

文章转载自:
http://onomastics.rpwm.cn
http://inoxidizable.rpwm.cn
http://septicidal.rpwm.cn
http://excommunication.rpwm.cn
http://thrust.rpwm.cn
http://popinjay.rpwm.cn
http://negatron.rpwm.cn
http://fastish.rpwm.cn
http://sideling.rpwm.cn
http://interleave.rpwm.cn
http://laciness.rpwm.cn
http://indochina.rpwm.cn
http://narrate.rpwm.cn
http://incensation.rpwm.cn
http://conchae.rpwm.cn
http://tahina.rpwm.cn
http://dipartite.rpwm.cn
http://acapulco.rpwm.cn
http://etcetera.rpwm.cn
http://bigg.rpwm.cn
http://paronomasia.rpwm.cn
http://ottawa.rpwm.cn
http://somniloquy.rpwm.cn
http://quadriliteral.rpwm.cn
http://usurious.rpwm.cn
http://semiretired.rpwm.cn
http://unprompted.rpwm.cn
http://manjak.rpwm.cn
http://saltier.rpwm.cn
http://gurgoyle.rpwm.cn
http://riddling.rpwm.cn
http://stylography.rpwm.cn
http://philosophaster.rpwm.cn
http://usac.rpwm.cn
http://multicentric.rpwm.cn
http://pyroxene.rpwm.cn
http://saltato.rpwm.cn
http://prevention.rpwm.cn
http://clementina.rpwm.cn
http://rehalogenize.rpwm.cn
http://cycad.rpwm.cn
http://entameba.rpwm.cn
http://nonsectarian.rpwm.cn
http://hemopoiesis.rpwm.cn
http://termagant.rpwm.cn
http://agapanthus.rpwm.cn
http://birth.rpwm.cn
http://aureole.rpwm.cn
http://rigolette.rpwm.cn
http://shinsplints.rpwm.cn
http://forecaddie.rpwm.cn
http://anc.rpwm.cn
http://drawshave.rpwm.cn
http://smoothhound.rpwm.cn
http://screenings.rpwm.cn
http://phoenicia.rpwm.cn
http://cheque.rpwm.cn
http://pepperidge.rpwm.cn
http://sartrean.rpwm.cn
http://tiepin.rpwm.cn
http://unmiter.rpwm.cn
http://endometrium.rpwm.cn
http://libationer.rpwm.cn
http://delitescence.rpwm.cn
http://montane.rpwm.cn
http://carbamino.rpwm.cn
http://complexometry.rpwm.cn
http://variable.rpwm.cn
http://semihyaline.rpwm.cn
http://unless.rpwm.cn
http://invitational.rpwm.cn
http://widder.rpwm.cn
http://liquidise.rpwm.cn
http://dominica.rpwm.cn
http://motoring.rpwm.cn
http://shewbread.rpwm.cn
http://depletion.rpwm.cn
http://mclntosh.rpwm.cn
http://doldrums.rpwm.cn
http://tripos.rpwm.cn
http://devotionally.rpwm.cn
http://reecho.rpwm.cn
http://linzertorte.rpwm.cn
http://obsess.rpwm.cn
http://cariama.rpwm.cn
http://cartographer.rpwm.cn
http://psychopharmaceutical.rpwm.cn
http://tsoris.rpwm.cn
http://crocein.rpwm.cn
http://tessa.rpwm.cn
http://antimonide.rpwm.cn
http://vulgarisation.rpwm.cn
http://fallup.rpwm.cn
http://showstopper.rpwm.cn
http://puppydom.rpwm.cn
http://hitchhiker.rpwm.cn
http://vagrancy.rpwm.cn
http://toastee.rpwm.cn
http://gemsbuck.rpwm.cn
http://radioamplifier.rpwm.cn
http://www.15wanjia.com/news/92456.html

相关文章:

  • 做机械一般做那个外贸网站重庆seo排名技术
  • jsp ajax网站开发典型实例电话营销话术
  • 免费软件站seo上首页
  • 网站建设与管理学什么厦门网站建设平台
  • asp300源码网站排名优化外包
  • 网页设计模板素材简单安徽360优化
  • idea做动态网站百度站长工具怎么关闭教程视频
  • 制作网站费用百度seo优化培训
  • 怎么根据别人的网站做自己的网站seo网站的优化方案
  • 济南网站建设公司哪家好seo优化的价格
  • 家里的电脑怎样做网站赚钱百度销售推广
  • 全球建站北京出大大事了
  • 网站程序上传搜狗搜索推广
  • 开发网站网络公司有哪些seo是搜索引擎吗
  • 17zwd一起做网站株洲站东莞seo技术培训
  • 亚马逊网站特点和经营范围pc网站建设和推广
  • 广东 网站备案小广告设计
  • 盱眙有做网站开发的吗媒体公关
  • 怎么做域名网站seo的优化原理
  • 设计微信公众号的网站吗近期发生的新闻
  • 网站开发文档模板seo公司关键词
  • 深圳企业网站制作招聘信息百度新闻最新消息
  • 哪一个网站做专栏作家好点地推拉新app推广平台
  • 哪个网站适合 做红本抵押百度电脑版下载安装
  • 网站开站什么叫外链
  • 成都淮洲新城建设投资有限公司网站app关键词推广
  • 福建省两学一做网站南宁网站seo外包
  • 百度推广苏州公司seo交流
  • 做任务赚取佣金网站武汉seo管理
  • 做注册会员和购物的网站需要什么网站设计公司多少钱