让ChatGPT来帮我们写一个贪吃蛇代码,是骡子是马总得拉出来溜溜

在这里插入图片描述

ChatGPT实在是太火了,铺天盖地的信息让人不得不好奇,到底有没有网上说的那么厉害呢,就让我们用事实说话,现实测试一下他的代码能力。

刚好前一段时间自己写了一个贪吃蛇的c++代码,那么就让GPT也写一个,看看功力如何,开整!

以下就是我和GPT的对话内容了,我先让他写了原始的代码,发现可以运行但是屏闪有点严重,所以再让他进行了两次优化,小游戏基本就可以用了,还是挺厉害的,而且代码在devc++中全部运行通过。大家帮我看看写的怎么样。

游戏测试运行情况
游戏测试运行情况

聊天内容:

来自kevin的消息:

用c++写一个贪吃蛇的小游戏

来自 ChatGPT 的消息:

以下是使用C++实现一个简单的贪吃蛇小游戏的代码:

#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
ChatGPT
bool gameOver;
const int width = 20;
const int height = 20;
int x, y, fruitX, fruitY, score;
int tailX[100], tailY[100];
int nTail;enum eDirection { STOP = 0, LEFT, RIGHT, UP, DOWN };
eDirection dir;void Setup()
{gameOver = false;dir = STOP;x = width / 2;y = height / 2;fruitX = rand() % width;fruitY = rand() % height;score = 0;
}void Draw()
{system("cls");for (int i = 0; i < width + 2; i++)cout << "#";cout << endl;for (int i = 0; i < height; i++){for (int j = 0; j < width; j++){if (j == 0)cout << "#";if (i == y && j == x)cout << "O";else if (i == fruitY && j == fruitX)cout << "F";else{bool print = false;for (int k = 0; k < nTail; k++){if (tailX[k] == j && tailY[k] == i){cout << "o";print = true;}}if (!print)cout << " ";}if (j == width - 1)cout << "#";}cout << endl;}for (int i = 0; i < width + 2; i++)cout << "#";cout << endl;cout << "Score:" << score << endl;
}void Input()
{if (_kbhit()){switch (_getch()){case 'a':dir = LEFT;break;case 'd':dir = RIGHT;break;case 'w':dir = UP;break;case 's':dir = DOWN;break;case 'x':gameOver = true;break;}}
}void Logic()
{int prevX = tailX[0];int prevY = tailY[0];int prev2X, prev2Y;tailX[0] = x;tailY[0] = y;for (int i = 1; i < nTail; i++){prev2X = tailX[i];prev2Y = tailY[i];tailX[i] = prevX;tailY[i] = prevY;prevX = prev2X;prevY = prev2Y;}switch (dir){case LEFT:x--;break;case RIGHT:x++;break;case UP:y--;break;case DOWN:y++;break;default:break;}if (x >= width)x = 0;else if (x < 0)x = width - 1;if (y >= height)y = 0;else if (y < 0)y = height - 1;for (int i = 0; i < nTail; i++)if (tailX[i] == x && tailY[i] == y)gameOver = true;if (x == fruitX && y == fruitY){score += 10;fruitX = rand() % width;fruitY = rand() % height;nTail++;}
}int main()
{Setup();while (!gameOver){Draw();Input();Logic();Sleep(50);}return 0;
}

这个游戏的实现使用了简单的控制台绘图,首先定义了一个二维矩阵用于表示游戏地图。通过不断地更新蛇的位置和尾巴的位置来实现贪吃蛇游戏的效果。在运行过程中,利用kbhit()和getch()函数来监听玩家的输入,实现蛇的移动。同时,也需要判断是否吃到了食物来增加玩家的得分。

来自kevin的消息:

可不可以优化一下屏闪问题

来自 ChatGPT 的消息:

可以优化一下屏幕闪烁的问题来提高游戏的用户体验。使用Windows.h头文件中的SetConsoleCursorPosition()函数可以实现这个效果,它可以设置游戏绘图的光标位置,使得绘图时只刷新需要刷新的部分,从而避免了整个游戏地图的屏幕闪烁问题。优化后的代码如下:

#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;bool gameOver;
const int width = 20;
const int height = 20;
int x, y, fruitX, fruitY, score;
int tailX[100], tailY[100];
int nTail;enum eDirection { STOP = 0, LEFT, RIGHT, UP, DOWN };
eDirection dir;void Setup()
{gameOver = false;dir = STOP;x = width / 2;y = height / 2;fruitX = rand() % width;fruitY = rand() % height;score = 0;
}void Draw()
{system("cls");for (int i = 0; i < width + 2; i++)cout << "#";cout << endl;for (int i = 0; i < height; i++){for (int j = 0; j < width; j++){if (j == 0)cout << "#";if (i == y && j == x)cout << "O";else if (i == fruitY && j == fruitX)cout << "F";else{bool print = false;for (int k = 0; k < nTail; k++){if (tailX[k] == j && tailY[k] == i){cout << "o";print = true;}}if (!print)cout << " ";}if (j == width - 1)cout << "#";}cout << endl;}for (int i = 0; i < width + 2; i++)cout << "#";cout << endl;cout << "Score:" << score << endl;
}void Input()
{if (_kbhit()){switch (_getch()){case 'a':dir = LEFT;break;case 'd':dir = RIGHT;break;case 'w':dir = UP;break;case 's':dir = DOWN;break;case 'x':gameOver = true;break;}}
}void Logic()
{int prevX = tailX[0];int prevY = tailY[0];int prev2X, prev2Y;tailX[0] = x;tailY[0] = y;for (int i = 1; i < nTail; i++){prev2X = tailX[i];prev2Y = tailY[i];tailX[i] = prevX;tailY[i] = prevY;prevX = prev2X;prevY = prev2Y;}switch (dir){case LEFT:x--;break;case RIGHT:x++;break;case UP:y--;break;case DOWN:y++;break;default:break;}if (x >= width)x = 0;else if (x < 0)x = width - 1;if (y >= height)y = 0;else if (y < 0)y = height - 1;for (int i = 0; i < nTail; i++)if (tailX[i] == x && tailY[i] == y)gameOver = true;if (x == fruitX && y == fruitY){score += 10;fruitX = rand() % width;fruitY = rand() % height;nTail++;}
}int main()
{Setup();while (!gameOver){Draw();Input();Logic();COORD cur = { 0, 0 };SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), cur);Sleep(50);}return 0;
}

使用SetConsoleCursorPosition()函数可以设置绘图开始的光标位置,覆盖之前绘制的内容,从而避免了闪烁和不必要的刷新,提升了游戏的用户体验。

来自kevin的消息:

还是闪烁的很厉害啊

来自 ChatGPT 的消息:

对于屏幕闪烁的问题,我的建议是使用Windows.h中的SetConsoleCursorInfo()函数来隐藏光标,从而避免光标的闪烁问题。同时,之前提到的使用SetConsoleCursorPosition()函数也可以在更新游戏内容时只刷新需要更新的部分,从而避免整个游戏地图屏幕闪烁的问题。下面是优化后的代码:

#include <iostream>
#include <conio.h>
#include <windows.h>using namespace std;bool gameOver;
const int width = 20;
const int height = 20;
int x, y, fruitX, fruitY, score;
int tailX[100], tailY[100];
int nTail;enum eDirection { STOP = 0, LEFT, RIGHT, UP, DOWN };
eDirection dir;void Setup()
{gameOver = false;dir = STOP;x = width / 2;y = height / 2;fruitX = rand() % width;fruitY = rand() % height;score = 0;
}void Draw()
{HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);CONSOLE_CURSOR_INFO cursorInfo;GetConsoleCursorInfo(hConsole, &cursorInfo);cursorInfo.bVisible = false;SetConsoleCursorInfo(hConsole, &cursorInfo); // 隐藏光标COORD cur = { 0, 0 };SetConsoleCursorPosition(hConsole, cur); // 将光标移动到顶部,避免闪烁for (int i = 0; i < width + 2; i++)cout << "#";cout << endl;for (int i = 0; i < height; i++){for (int j = 0; j < width; j++){if (j == 0)cout << "#";if (i == y && j == x)cout << "O";else if (i == fruitY && j == fruitX)cout << "F";else{bool print = false;for (int k = 0; k < nTail; k++){if (tailX[k] == j && tailY[k] == i){cout << "o";print = true;}}if (!print)cout << " ";}if (j == width - 1)cout << "#";}cout << endl;}for (int i = 0; i < width + 2; i++)cout << "#";cout << endl;cout << "Score:" << score << endl;
}void Input()
{if (_kbhit()){switch (_getch()){case 'a':dir = LEFT;break;case 'd':dir = RIGHT;break;case 'w':dir = UP;break;case 's':dir = DOWN;break;case 'x':gameOver = true;break;}}
}void Logic()
{int prevX = tailX[0];int prevY = tailY[0];int prev2X, prev2Y;tailX[0] = x;tailY[0] = y;for (int i = 1; i < nTail; i++){prev2X = tailX[i];prev2Y = tailY[i];tailX[i] = prevX;tailY[i] = prevY;prevX = prev2X;prevY = prev2Y;}switch (dir){case LEFT:x--;break;case RIGHT:x++;break;case UP:y--;break;case DOWN:y++;break;default:break;}if (x >= width)x = 0;else if (x < 0)x = width - 1;if (y >= height)y = 0;else if (y < 0)y = height - 1;for (int i = 0; i < nTail; i++)if (tailX[i] == x && tailY[i] == y)gameOver = true;if (x == fruitX && y == fruitY){score += 10;fruitX = rand() % width;fruitY = rand() % height;nTail++;}
}int main()
{Setup();while (!gameOver){Draw();Input();Logic();Sleep(50);}return 0;
}

以上是对贪吃蛇游戏的屏幕闪烁问题的两种优化方法,希望能对您有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/61660.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

百度网盘怎么取消自动续费

第一步&#xff1a;双击百度网盘快捷键&#xff0c;点击进入&#xff0c;登录网盘账号。 第二步&#xff1a; 点击会员中心&#xff0c;接着点击管理自动续费。 第三步&#xff1a;点击取消选项&#xff0c;出现提示框点击 确定 即可取消自动续费。 最后&#xff0c;自动续费就…

自动续费PHP,Hostwinds 续费教程:管理取消支付宝、PayPal 等付款方式的自动续费...

Hostwinds 付款之后&#xff0c;默认会开通一个扣款协议&#xff0c;就是说到期之后可能会自动续费。但是之前的文章也说过&#xff0c;一般来说续费都是原价续费&#xff0c;是比较贵的&#xff0c;所以我们都是建议一次性多买几年&#xff0c;然后到期之后重新买。如果不小心…

经验分享:爱奇艺关闭自动续费会员的功能

分享一个和技术开发无关的经验,但是对爱奇艺会员续费不熟悉的话,这个经验还是很有作用的,尤其是自动续费这个功能,爱奇艺做的很好,很隐蔽,不刻意找的话基本找不到怎么取消自动续费会员的功能。那么,下面就来介绍一下怎么取消爱奇艺自动续费会员的功能,包括手机端和电脑…

怎么取消手机APP自动续费?详细方法来了,轻松易懂

在使用手机上网的时候&#xff0c;无论是游戏、外卖、看视频、听音乐等等&#xff0c;都拥有会员服务。每次开通会员的时候&#xff0c;平台会推出一种优惠政策&#xff0c;只需要同意自动续费的服务&#xff0c;就能够以极低的价格开通会员服务。可当自己不再需要会员的时候&a…

踩坑笔记 ---- 使用LocalDateTime开通会员到期时间与自动续费业务某天用户突然为0

写在前面 使用LocalDateTime的同学需要注意下&#xff0c;这东西的plusMonth可能会有点点超出你的认知&#xff0c;如果不慎掉坑里&#xff0c;希望这篇笔记可以给你提供思路 业务背景 此业务场景非常简单&#xff0c;自动续费业务&#xff0c;需要在用户会员到期前24小时执…

ChatGPT来了,软件测试工程师距离失业还远吗?

小伙伴们前一段是不是都看到过ChatGPT的相关视频&#xff0c;那它到底是什么&#xff1f;对软件测试行业会有什么影响&#xff1f; 今天汇智妹就用一篇文章来给大家讲清楚。 一、ChatGPT是什么&#xff1f; 简单来说&#xff0c;ChatGPT是一款人工智能聊天机器人&#xff0c;…

ChatGPT会让软件测试人员失业吗?

首先&#xff0c;正视ChatGPT &#xff0c;它只是一款提升测试效率的工具&#xff0c;并不会让测试失业 ChatGPT 本质上就是一个搜索引擎的二次封装&#xff0c;它更能理解你的输入意图&#xff0c;它更精确的帮你拼接返回结果。但它就是一个辅助工具&#xff0c;用好了可以帮…

抖音视频数据抓取

最近经常有人问我抓取抖音视频的数据&#xff0c;下面就来抓取一下吧。 还是先抓包&#xff0c;获取需要的接口和参数&#xff0c;相关的算法在其它文章里面有介绍。 搜索个视频看看 在抖音搜索框那里任意搜索个什么词。 查看抓的包信息: 可以看到&#xff0c;这里是post请…

抖音视频怎么制作

1、抖音拍摄制作 抖音短视频作为一款视频拍摄、分享软件&#xff0c;自身也带有一些功能可以实现抖音视频制作&#xff0c;做出的抖音视频也很好玩。 步骤&#xff1a; 1、首先安装好抖音并打开软件&#xff0c;点击软件正下方的“”。 2、可以点击“视频”自动拍摄一段视频&…

抖音视频评论采集

总结一下现在采集抖音评论的方法&#xff0c;根据不同的业务可以选择不同的采集方式。 需要代码可查看第4部分网页版评论采集。 文章内容仅供参考学习&#xff0c;如有侵权请联系作者进行删除。 文章目录 1、自动化工具采集2、第三方平台采集3、APP评论采集4、网页版评论采集专…

小程序如何实现抖音视频效果?

1、wxml部分代码 &#xff0c;主要是利用swiper 标签滑动切换&#xff0c;事件处理&#xff0c;具体参数说明可以去小程序官网文档看。https://developers.weixin.qq.com/miniprogram/dev/component/swiper.html <swiper vertical"{{true}}"current"{{curren…

如何开发自动生产爆款抖音视频机器人

这是我这利用技术 自动生成的抖音视频,每个视频都是原创,而且可以基于主题生成对应的视频封面,例如需要制作大海主题的视频,只需要输入 “大海”,就可以生成视频封面为大海且背景音乐为海相关的主题视频。 抖音短视频分解 其实自动化制作视频并不难,我们可以通过一个短视…

微信小程序实现抖音视频效果

当我们进行开发的时候可能会遇到需要实现抖音视频效果的需求&#xff0c;并且网上该效果的开源代码少&#xff0c;找到的开源代码代码量大&#xff0c;很难进行二次开发 对此我将自己的代码进行简化&#xff0c;仅留下可动性高的代码模块 以上是实现效果与此处demo的模板 <…

抖音短视频脚本制作的一些技巧,快快收藏起来!

在抖音上发布一个成功的短视频需要多方面的考虑&#xff0c;其中最重要的是脚本的制作。一个好的脚本不仅可以吸引用户观看&#xff0c;还可以让用户产生共鸣&#xff0c;从而提高视频的传播效果。以下是不若与众科技一些关于抖音短视频脚本制作的技巧。 1. 简短明了 抖音短视…

抖音视频链接数据分析

一、制作背景 目前抖音账号数据只能进入后台查看 对于个人自媒体和工作室管理的账号 数量众多不利于提升效率。特别是工作室 一人管理数个账号每天发布几十条视频 隔天观看后台数据就要数个小时 每天剪辑视频发布视频观看后台 数据一天就过去了&#xff0c;每天还忙的焦头烂额 …

python爬虫+pyqt5制作完成 <在线翻译软件.exe>

#仅供学习参考。 目标网站&#xff1a;网易翻译pyqt5 在线翻译.exe 功能需求&#xff1a;中英互译&#xff0c;其他国家语言也行&#xff0c;如果能用键盘打得出来得话&#xff0c;这部分功能没怎么测试。 界面介绍&#xff1a;因为有时候网络有延迟&#xff0c;所有增加了个…

新媒体人都在用的6款在线设计工具

无论是在工作中还是学习中&#xff0c;经常会需要用到各种工具。学会运用工具&#xff0c;可以让你事半功倍&#xff0c;轻松高效地完成任务&#xff01;今天给大家整理几款高效的在线设计工具&#xff0c;一起来看看吧&#xff01; 01.稿定设计——贴图加水印 网址&#xff…

mac设计师系列 Adobe “全家桶” 15款设计软件 值得收藏!

文章素材来源&#xff1a;风云社区、简书 文章收录于&#xff1a;风云社区 www.scoee.com&#xff0c;提供1700多款mac软件下载 Adobe Creative Cloud 全线产品均可开放下载&#xff08;简称Adobe CC 全家桶&#xff09;&#xff0c;Adobe Creative Cloud 为多国语言版本&#…

Principle for Mac 6.12 中文版 优秀的交互原型设计工具

Principle for Mac 是一款优秀的交互原型设计工具&#xff0c;可以在很短时间内制作出一个具有完整交互动画的原型&#xff0c;并且可将交互动画生成视频或者 Gif 分享到 Dribbble、Twitter 等社交平台。此外 Principle 还支持多种尺寸的原型设计&#xff0c;包括 Apple Watch&…

spacedesk-把ipad变成显示器-真香经验全面分享

目录 spacedesk基本使用 spacedesk自定义设置 退出和重新开启电脑端的spacedesk软件 作为学生党&#xff0c;去图书馆学习不能背着个显示器&#xff0c;工作人士出去出差可能也需要显示器&#xff0c;如果你有平板的话&#xff0c;何不物尽其用呢。其实无论是ipad&#xff0…