C++双人贪吃蛇博弈

这个游戏没有吃东西这回事,但你的AI要和别的AI在有障碍的地图上博弈,看谁存活的时间长(蛇会生长)。

有两个问题请教一下:
如何避免走入死胡同
蛇长长后,地图可用空间非常狭小,如何合理倒开空间以便于存活
说说思路与实现方式就好

5个回答

用一个二维数组存场景上的可行点
0为不可走,也就是有障碍
1为可走
每次蛇要走的时候,都判断前,左,右是否可走,都可走就继续直走
不能直走就判断当前处于整个地图靠左还是靠右位置
靠左就朝右走,靠右就超左走(这个左右不是地图的绝对左右,而且蛇自身的左右)
这是一个比较基础的ai算法
你还可以写的更高级些

图片说明

j550341130
叽哩叽哩鸡 回复ilbn20: 嗨嗨,我也不知道
4 年多之前 回复
ilbn20
ilbn20 这是咋写的这么厉害
4 年多之前 回复
ilbn20
ilbn20 这是咋写的这么厉害
4 年多之前 回复

这样就行

我看可以参考围旗的思想。
1. 通过围堵使对方没有空间可以施展
2. 尽量扩大自己的地盘,同样采用围堵的办法把自己围在一个大的空间里

至于不走入死胡同,需要计算自己尾移动方向、对方头的移动方向、对方尾的移动方向,根据这三个计算结果来确定自己头的移动方向。由于是博弈,所以计算对方头的移动方向是最重要的,这个方向的计算应该是需要有一定的预测性

ilbn20
ilbn20 。。。网太卡,点一下出那么多
4 年多之前 回复
ilbn20
ilbn20 随机障碍物该如何处理呢
4 年多之前 回复
ilbn20
ilbn20 随机障碍物该如何处理呢
4 年多之前 回复
ilbn20
ilbn20 随机障碍物该如何处理呢
4 年多之前 回复
ilbn20
ilbn20 随机障碍物该如何处理呢
4 年多之前 回复
ilbn20
ilbn20 随机障碍物该如何处理呢
4 年多之前 回复
ilbn20
ilbn20 随机障碍物该如何处理呢
4 年多之前 回复
ilbn20
ilbn20 随机障碍物该如何处理呢
4 年多之前 回复

随机障碍物的话,那就要特定处理了,因为它的位置不固定,只能在每一次计算的时候单独处理。就是在计算蛇的头尾移动方向的时候把当时的障碍物位置除去,而最终计算出自己头移动方向的时候,可能需要下次障碍物出现的不同位置而保留多个方案,那些障碍物出现的位置会导致头移动方向进入死胡同的方案需要过滤掉

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
双人贪吃蛇
C语言的一个C语言的
双人版贪吃蛇+C源码
使用贪吃蛇,VS 必须安装图形库才能运行程序 。 贪吃蛇比较简单,大多数人都会,留给初学者参考使用
C语言双人贪吃蛇源代码
该源代码为C语言双人/单人贪吃蛇 编译软件WIN-TC 操作系统WINDOWS XP SP3 有单人双人模式选择 开场动画 分数统计 随机障碍 速度变换 但是由于我的操作系统中delay()的控制单位不是MS 所以在源代码中进行了一定的处理
C语言 贪吃蛇 双人版
由于代码技术得提升,注解基本就没有写了,(其中还用了cv大法(部分代码有重复利用的地方),哈哈,仅供参考,如有不足,望指出。也可以加我QQ:2862841130讨论) wasd玩家一控制,上下左右方向键玩家二控制 #include<stdio.h> #include<stdlib.h> #include<conio.h> #include&lt...
c语言写的双人贪吃蛇
纯c语言写的双人贪吃蛇小游戏,没有用图形库
C++ 双人贪吃蛇
这篇代码基于博主的“C++ 贪吃蛇基本算法”,加入第二只蛇让他移动并不难,但考虑到要让两只蛇的移动互不干扰那还真是破事真多。博主将“C++ 贪吃蛇基本算法”中的while(1)改成了goto,以用来将两条蛇的计数器分开,并加入了变量“move”来判断按键是操纵谁。在这篇代码中,switch()函数可能阅读起来非常困难,因为蛇2输入的按键与地图上的字符不匹配,所以这篇代码看起来并不是很明了。由于太麻烦
双人版贪吃蛇
可以实现两人互相吞吃的双人版贪吃蛇游戏,运用的是linux环境下,结合qt界面实现的小游戏
双人版贪吃蛇 mfc
双人版对战贪吃蛇,可输入获胜所需积分
双人贪吃蛇源代码
双人贪吃蛇 源代码中的点阵的头文件可以删除
HTML5小试 双人贪吃蛇
当前速度1:-300ms+ 当前速度2:-300ms+ 您的浏览器版本过低 var st1 = "红方 GAMEOVER!",st2 = "蓝方 GAMEOVER!"; var obj = document.getElementById("mcan"); var ctx = obj.getContext("2d");//canvas对象 var width = 30
一个精简版的双人贪吃蛇
import pygame, sys, time, random from pygame.locals import * redColour = pygame.Color(255, 0, 0) greenColour = pygame.Color(0, 255, 0) blueColour = pygame.Color(0, 0, 255) blackColour = pygame.Color(...
双人贪吃蛇java
双人小游戏java版贪吃蛇根据网上各种大神汇聚改变而成的
C语言编写双人贪吃蛇游戏
双人贪吃蛇游戏运行环境 visual stdio 2017 /* 贪吃蛇游戏 //双人版本 玩家2使用 W 上 S下 A左 D右边 玩家1使用 箭头上 箭头下 箭头左 箭头右 */ /* 作者:李金虎 */ /* 时间:2018-04-06 */ /* QQ:1910084514 */ #include<stdio.h&...
c语言双人贪吃蛇-基于图形库实现
/* 蛇蛇大作战 作者:施瑞文 */ #include <conio.h> #include <graphics.h> #include <time.h> #include <stdlib.h> #include <string.h> #include <stdio.h> #include <mmsystem....
C语言双人贪吃蛇游戏瘦身版本
代码如下,希望大家批评指正哈。很多没有加注释,但是有基础的人还是能看懂的 hhhhh运行环境 vs2017VS2017中使用fopen、sprintf等函数会出现安全问题,如下: error C4996: ‘fopen’: This function or variable may be unsafe. Consider using fopen_s instead. To disable depr...
c#双人贪吃蛇及代码
c#开发的,支持双人同时进行,有障碍,内含源代码
贪吃蛇游戏(双人)JAVA源码
贪吃蛇游戏(双人)JAVA源码 贪吃蛇游戏(双人)JAVA源码
双人对战java贪吃蛇
代码有详细的注释,只有游戏部分,没有积分的部分,中间的障碍是Love,双方分别从上下两头开始,在里面进行PK,写着练习的,仅供参考,嘿嘿。操作方法在文件里的 txt文档里
delphi贪吃蛇双人版
delphi做的贪吃蛇,可以同时有两个人一起玩,代码仅供参考。
贪吃蛇双人对战小游戏
一款用VC++编写的小游戏,供码友参考,贪吃蛇双人对战版,不一样的赶脚
VC#双人贪吃蛇(vs2005)
采用VS2005下做的小游戏 比简单贪吃蛇多个争抢事件
C语言 贪吃蛇双人对战版
用C语言写的一个游戏 贪吃蛇双人对战版(计分 吃炸弹) 代码用codeblocks编译通过,其他编译器自行测试。
C语言实现双人版贪吃蛇(图形界面)
请原谅我资源分有点高。不过这份代码是我花了很长时间修修改改实现的,并且有详细的注解帮助你理解,有什么问题欢迎交流。
双人博弈五子棋 简单 MFC
简单的双人博弈五子棋,供初学者学习借鉴,共同提高!
双人玩的Delphi贪吃蛇游戏
双人玩的Delphi贪吃蛇游戏! 值得下载看看!资源免费,大家分享!! 更多免费资源 http://ynsky.download.csdn.net/
贪吃蛇双人版(含源代码)
贪吃蛇双人版(含源代码) 使用方法:左边控制键为wsad,分别代表 上下左右 方向 左边控制键为几个箭头键,分别代表 上下左右 方向
TC写的双人贪吃蛇游戏
在家无聊,花了两三天用TC写了个双人贪吃蛇游戏.UI很粗糙,但是游戏核心是完整的.玩法很简单:wasd和方向键分别控制两条蛇,吃食物长个子,撞到墙壁或者任何蛇身都会使长度变短.长度变为0的就输. 目前仅在XP下测试通过.并且在全局变量定义区域可以通过修改dv值(默认800)来调整速度.(dv越大速度越慢). 希望有兴趣的同学可以完善UI,或者制定新规则!~ 源码及编译过的exe都在附件里面.如有意更改,建议使用Win-TC软件.修改时注意不要更改头部版权信息哦~
c语言贪吃蛇游戏双人对战版源码
贪吃蛇 。。。。。。。。。。。。。。。。。。。。。。。。
C 博弈
链接:https://www.nowcoder.com/acm/contest/87/J来源:牛客网题目描述 OI 的生涯如此短暂,恐怕就要到了分别的时候了。 回想起自己的OI 生活,那一切的一切都历历在目。 仍然记得,在骄阳似火的夏天,机房内一群完全不懂编程的小白,围在黑板前,听学长不厌其烦的讲解。 仍然记得,在金凤飒爽的秋天,考完NOIP时那失望的表情,那下定决心努力补弱的意志。 仍然记得,...
java贪吃蛇大作业(双人联网背景音乐)
java贪吃蛇大作业,做时粗糙,界面简陋,但联网及背景音乐等功能全部实现,可作参考。使用时解压两个文件夹,分别作为项目文件夹用intellj idea打开,先运行服务端代码,再运行客户端,分别用上下左右,wsad控制运动,当两个食物都被吃了后食物才会刷新
c语言 贪吃蛇!贪吃蛇 c语言贪吃蛇
c语言 贪吃蛇!贪吃蛇 c语言贪吃蛇,c语言 贪吃蛇!贪吃蛇 c语言贪吃蛇,c语言 贪吃蛇!贪吃蛇 c语言贪吃蛇
双人五子棋C源程序
五子棋源程序,双人对弈,简洁的C实现算法,
游戏贪吃蛇双人版程序及代码
使用方法: 左边控制键为wsad,分别代表 上下左右 方向。 左边控制键为几个箭头键,分别代表 上下左右 方向。project111.exe为可执行文件,其他的为delphi源代码。有问题者请发邮件到zhouyujie238@yahoo.com.cn或登陆作者主页http://home.kimo.com.tw/zhouyujie238 周玉偈 2004于杭电会计实验室
Pygame游戏源代码:网络版双人对战贪吃蛇
Pygame游戏源代码:网络版双人对战贪吃蛇 包含代码、图片、声音等所有资源,可直接运行 游戏时先运行SnakeServer,启动服务器。在分别运行SnakeP1和SnakeP2启动两个客户端。服务器和两个客户端的IP可在源代码中直接修改。
双人玩的Delphi贪吃蛇游戏.rar
双人玩的Delphi贪吃蛇游戏,可两个人同时玩的贪吃蛇,界面如演示截图所示。使用方法:左边控制键为wsad,分别代表 上下左右 方向,左边控制键为几个箭头键,分别代表 上下左右 方向。project111.exe为可执行文件,其他的为delphi源代码。
贪吃蛇.c
贪吃蛇 c语言版 win-tc下运行
c 贪吃蛇
#define N 200<br>#include <graphics.h><br>#include <stdlib.h><br>#include <dos.h><br>#define LEFT 0x4b00<br>#define RIGHT 0x4d00<br>#define DOWN 0x5000<br>#define UP 0x4800<br>#define ESC 0x011b<br>int i,key;<br>int score=0;/*得分*/<br>int gamespeed=50000;/*游戏速度自己调整*/<br>struct Food<br>{<br> int x;/*食物的横坐标*/<br> int y;/*食物的纵坐标*/<br> int yes;/*判断是否要出现食物的变量*/<br>}food;/*食物的结构体*/<br>struct Snake<br>{<br> int x[N];<br> int y[N];<br> int node;/*蛇的节数*/<br> int direction;/*蛇移动方向*/<br> int life;/* 蛇的生命,0活着,1死亡*/<br>}snake;<br>void Init(void);/*图形驱动*/<br>void Close(void);/*图形结束*/<br>void DrawK(void);/*开始画面*/<br>void GameOver(void);/*结束游戏*/<br>void GamePlay(void);/*玩游戏具体过程*/<br>void PrScore(void);/*输出成绩*/<br>/*主函数*/<br>void main(void)<br>{<br> Init();/*图形驱动*/<br> DrawK();/*开始画面*/<br> GamePlay();/*玩游戏具体过程*/<br> Close();/*图形结束*/<br>}<br>/*图形驱动*/<br>void Init(void)<br>{<br> int gd=DETECT,gm;<br> initgraph(&gd,&gm,"c:\\tc");<br> cleardevice();<br>}<br>/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/<br>void DrawK(void)<br>{<br>/*setbkcolor(LIGHTGREEN);*/<br> setcolor(11);<br> setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/<br> for(i=50;i<=600;i+=10)/*画围墙*/<br> {<br> rectangle(i,40,i+10,49); /*上边*/<br> rectangle(i,451,i+10,460);/*下边*/<br> }<br> for(i=40;i<=450;i+=10)<br> {<br> rectangle(50,i,59,i+10); /*左边*/<br> rectangle(601,i,610,i+10);/*右边*/<br> }<br>}<br>/*玩游戏具体过程*/<br>void GamePlay(void)<br>{<br> randomize();/*随机数发生器*/<br> food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/<br> snake.life=0;/*活着*/<br> snake.direction=1;/*方向往右*/<br> snake.x[0]=100;snake.y[0]=100;/*蛇头*/<br> snake.x[1]=110;snake.y[1]=100;<br> snake.node=2;/*节数*/<br> PrScore();/*输出得分*/<br> while(1)/*可以重复玩游戏,压ESC键结束*/<br> {<br> while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/<br> {<br> if(food.yes==1)/*需要出现新食物*/<br> {<br> food.x=rand()%400+60;<br> food.y=rand()%350+60;<br> while(food.x%10!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/<br> food.x++;<br> while(food.y%10!=0)<br> food.y++;<br> food.yes=0;/*画面上有食物了*/<br> }<br> if(food.yes==0)/*画面上有食物了就要显示*/<br> {<br> setcolor(GREEN);<br> rectangle(food.x,food.y,food.x+10,food.y-10);<br> }<br> for(i=snake.node-1;i>0;i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/<br> {<br> snake.x[i]=snake.x[i-1];<br> snake.y[i]=snake.y[i-1];<br> }<br> /*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/<br> switch(snake.direction)<br> {<br> case 1:snake.x[0]+=10;break;<br> case 2: snake.x[0]-=10;break;<br> case 3: snake.y[0]-=10;break;<br> case 4: snake.y[0]+=10;break;<br> }<br> for(i=3;i<snake.node;i++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/<br> {<br> if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0])<br> {<br> GameOver();/*显示失败*/<br> snake.life=1;<br> break;<br> }<br> }<br> if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||<br> snake.y[0]>455)/*蛇是否撞到墙壁*/<br> {<br> GameOver();/*本次游戏结束*/<br> snake.life=1; /*蛇死*/<br> }<br> if(snake.life==1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/<br> break;<br> if(snake.x[0]==food.x&&snake.y[0]==food.y)/*吃到食物以后*/<br> {<br> setcolor(0);/*把画面上的食物东西去掉*/<br> rectangle(food.x,food.y,food.x+10,food.y-10);<br> snake.x[snake.node]=-20;snake.y[snake.node]=-20;<br> /*新的一节先放在看不见的位置,下次循环就取前一节的位置*/<br> snake.node++;/*蛇的身体长一节*/<br> food.yes=1;/*画面上需要出现新的食物*/<br> score+=10;<br> PrScore();/*输出新得分*/<br> }<br> setcolor(4);/*画出蛇*/<br> for(i=0;i<snake.node;i++)<br> rectangle(snake.x[i],snake.y[i],snake.x[i]+10,<br> snake.y[i]-10);<br> delay(gamespeed);<br> setcolor(0);/*用黑色去除蛇的的最后一节*/<br> rectangle(snake.x[snake.node-1],snake.y[snake.node-1],<br> snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);<br> } /*endwhile(!kbhit)*/<br> if(snake.life==1)/*如果蛇死就跳出循环*/<br> break;<br> key=bioskey(0);/*接收按键*/<br> if(key==ESC)/*按ESC键退出*/<br> break;<br> else<br> if(key==UP&&snake.direction!=4)<br>/*判断是否往相反的方向移动*/<br> snake.direction=3;<br> else<br> if(key==RIGHT&&snake.direction!=2)<br> snake.direction=1;<br> else<br> if(key==LEFT&&snake.direction!=1)<br> snake.direction=2;<br> else<br> if(key==DOWN&&snake.direction!=3)<br> snake.direction=4;<br> }/*endwhile(1)*/<br>}<br>/*游戏结束*/<br>void GameOver(void)<br>{<br> cleardevice(); <br> PrScore();<br> setcolor(RED);<br> settextstyle(0,0,4);<br> outtextxy(200,200,"GAME OVER");<br> getch();<br>}<br>/*输出成绩*/<br>void PrScore(void)<br>{ <br> char str[10];<br> setfillstyle(SOLID_FILL,YELLOW);<br> bar(50,15,220,35);<br> setcolor(6);<br> settextstyle(0,0,2);<br> sprintf(str,"score:%d",score);<br> outtextxy(55,20,str);<br>}<br>/*图形结束*/<br>void Close(void)<br>{ <br> getch();<br> closegraph();<br>}<br>
贪吃蛇[c]
#include &amp;lt;iomanip&amp;gt; #include &amp;lt;cstdlib&amp;gt; #include &amp;lt;conio.h&amp;gt; #include &amp;lt;ctime&amp;gt; #include &amp;lt;windows.h&amp;gt; #include &amp;lt;iostream&amp;gt; using namespace std; const int N(27); const i
C贪吃蛇
C语言贪吃蛇 1、思路 贪吃蛇需要游戏的方框,那么方框怎么在控制台上画出来呢? 其实控制台也是有坐标的,将光标移动到特定的位置就可以在特定的位置输出了,利用函数SetConsoleCursorPosition将光标设定到我们想要的地方就可以画出方框了。其实蛇与食物都是这样画出来的。 怎样移动蛇呢? 假设用int a[10]表示蛇的位置a[0] 为蛇的尾巴,a[9]为舌头,移动的时候只需要
C语言制作的双人俄罗斯方块
本人写的双人俄罗斯方块 单人双人模式都可以(本人制作) 有任何问题或者程序BUG 可以联系本人 邮箱 :so-so7@163.com QQ:466565663
相关热词 c# 去空格去转义符 c#用户登录窗体代码 c# 流 c# linux 可视化 c# mvc 返回图片 c# 像素空间 c# 日期 最后一天 c#字典序排序 c# 截屏取色 c#中的哪些属于托管机制