您的位置:首页 → 攻略  →  手游攻略  →  围住神经猫游戏怎么做(围住神经猫玩法攻略)

围住神经猫游戏怎么做(围住神经猫玩法攻略)

2023-10-27 13:28:15作者:掌上游戏    阅读数:

每天一个C语言小项目,提升你的编程能力!

一、游戏说明

本游戏仿造 4399 的小游戏-围住神经猫。

游戏操作:通过鼠标点击操作,设置路障,围住神经猫,当成功围住神经猫时,游戏胜利。当神经猫逃离地图边缘,游戏失败。

二、游戏截图

围住神经猫游戏怎么做(围住神经猫玩法攻略)

 

三、实现思路

1. 地图还原:

首先是游戏的道路,这里我们采用绘制灰白色的圆来表示可走的路,用黄色的圆来表示已存在的障碍物。同时还需要注意奇偶行需要交错排列。

2. 猫的移动:

这里我们采用广度优先搜索求最短路径。"猫"在一个位置,能够移动的方向有6个,需要注意的是:

由于奇偶行交替排列,导致奇偶行猫的可行路径是不一样的,奇数行:上,下,左,右,左下,左上。

偶数行:上,下,左,右,右下,右上。剩下的就是常规的求最短路径即可。

注:代码中所用图片,请见文末

围住神经猫游戏怎么做(围住神经猫玩法攻略)

 

四、完整代码

简单了解游戏后我们就来试试吧!(直接上源码,大家可以看注释)

///////////////////////////////////////////////////////// // 程序名称:围住神经猫 // 编译环境 Visual Studio2019(C++语言标准选择C++17),EasyX // C语言/C++编程交流Q群:734106058 #include <graphics.h> #include <queue> #include <cstring> #include <ctime> #include <vector> #pragma comment( lib, "MSIMG32.LIB") #define pix 50 // 像素比例 #define hight (14 * pix) #define width (10 * pix) using namespace std; int stepS; // 记录已经走的步数 int startBarrier; // 开始的障碍物数目 wchar_t Score_[30]; MOUSEMSG m; // 鼠标操作 IMAGE pig, bkimg;; // 加载图片 enum class picture { none, barrier }; struct XY { int x, y; int lastX, lastY; //记录上一个点的坐标 }cat; struct node { int x, y; //坐标,圆心位置 picture pic; //当前位置的图片内容 }; node canvas[10][10]; // 地图 bool visit[10][10]; // 记录是否访问过地图中的元素 int path[10][10][2]; // 记录上一个位置 //注意:因为地图是交错排列的,奇数列与偶数列猫的移动不同 int dirOdd[6][2]{ 1,0,-1,0,0,1,0,-1,-1,-1,-1,1 }; //控制方向奇数列 int dirEven[6][2]{ 1,0,-1,0,0,1,0,-1,1,-1,1,1 }; //控制方向偶数列 int main(); //贴图函数 void transparentimage(IMAGE* dstimg, int x, int y, IMAGE* srcimg,int direction) { HDC dstDC = GetImageHDC(dstimg); HDC srcDC = GetImageHDC(srcimg); int w = 50; int h = 100; // 使用 Windows GDI 函数实现透明位图 if (direction == 0) TransparentBlt(dstDC, x, y, w, h, srcDC, 0, 0, w, h, 0); else TransparentBlt(dstDC, x, y, w, h, srcDC, 10, 187, w, h, 0); } //游戏初始化 void initial() { srand(time(0)); stepS = 0; startBarrier = rand() % 6 + 8; //障碍物数量 loadimage(&pig, L"pig.png"); loadimage(&bkimg, L"bkground.jpg", width, hight, true); initgraph(width, hight); HWND wnd = GetHWnd(); SetWindowText(wnd, L"围住神经猫");//设置文章标题 for (int i = 1; i <= 9; ++i) for (int j = 1; j <= 9; ++j) { if (i & 1) //如果是奇数行 canvas[i][j] = node{ j * pix - pix / 4, pix * 4 + i * pix ,picture::none }; else canvas[i][j] = node{ j * pix + pix / 4, pix * 4 + i * pix ,picture::none }; } cat.x = 5; cat.y = 5; //猫最开始的地方 while (startBarrier--) { int bx, by; //设置初始障碍 do { bx = rand() % 10; by = rand() % 10; } while (canvas[by][bx].pic == picture::barrier || (by == cat.y && bx == cat.x)); canvas[by][bx].pic = picture::barrier; } setbkmode(TRANSPARENT); BeginBatchDraw(); } //绘制游戏画面, 白色:空 黄色:障碍物 void show() { putimage(0, 0, &bkimg); setbkcolor(WHITE); settextstyle(20, 0, L"微软雅黑"); outtextxy(200, 170, L"重玩"); outtextxy(250, 180, L"步数: "); swprintf(Score_, 29, L"%d", stepS); outtextxy(290, 180, Score_); for (int i = 1; i <= 9; ++i) { for (int j = 1; j <= 9; ++j) { if (canvas[i][j].pic == picture::barrier) setfillcolor(YELLOW); else setfillcolor(LIGHTGRAY); solidcircle(canvas[i][j].x, canvas[i][j].y, (pix - 4) / 2); } } if (cat.y & 1) //奇数列 transparentimage(NULL, cat.x * pix - pix / 4 - 25, pix * 3 + cat.y * pix - 21, &pig,0); else //偶数列 transparentimage(NULL, cat.x * pix - 25 + pix / 4, pix * 3 + cat.y * pix - 21, &pig,1); FlushBatchDraw(); } //寻找下一个点的位置 struct LastOrder { int x, y; }; vector<LastOrder> vec; void findNextXY(int x, int y) { if (x == cat.x && y == cat.y) { vec.push_back({ x,y }); return; } else { findNextXY(path[y][x][0], path[y][x][1]); vec.push_back({ x,y }); } } //利用广度优先搜索求最短路径,xy为数组的i,j下标,注意传参 void bfs(XY xy) { //每次搜索时初始化数组 memset(visit, false, sizeof(visit)); memset(path, 0, sizeof(path)); bool tag = true; queue<XY> que; que.push(xy); visit[xy.y][xy.x] = true; while (!que.empty()) { XY temp = que.front(); que.pop(); //如果找到出口 if (temp.x == 1 || temp.x == 9 || temp.y == 1 || temp.y == 9) { findNextXY(temp.x, temp.y); cat.x = vec[1].x; cat.y = vec[1].y; vec.clear(); tag = false; break; } int dx, dy; //寻找可走的路 for (int i = 0; i < 6; ++i) { if (temp.y & 1) { dx = temp.x + dirOdd[i][0]; dy = temp.y + dirOdd[i][1]; } else { dx = temp.x + dirEven[i][0]; dy = temp.y + dirEven[i][1]; } if (dx >= 1 && dx <= 9 && dy >= 1 && dy <= 9 && !visit[dy][dx] && canvas[dy][dx].pic == picture::none) { visit[dy][dx] = true; path[dy][dx][0] = temp.x; path[dy][dx][1] = temp.y; que.push({ dx,dy,temp.x,temp.y }); } } } if (tag) //如果没找到出口 { show(); HWND wnd = GetHWnd(); swprintf(Score_, 29, L"你共用了%d步,重玩一局吗", stepS); FlushBatchDraw(); if (MessageBox(wnd, Score_, L"成功", MB_YESNO | MB_ICONQUESTION) == IDYES) main(); else exit(-1); } } //鼠标操作 void dataChangeWithMouseHit() { while (true) { m = GetMouseMsg(); if (m.x >= 200 && m.x <= 230 && m.y >= 170 && m.y <= 200) settextcolor(BLACK); else settextcolor(WHITE); outtextxy(200, 170, L"重玩"); FlushBatchDraw(); if (m.uMsg == WM_LBUTTONDOWN) { if (m.x >= 200 && m.x <= 230 && m.y >= 170 && m.y <= 200) main(); for (int i = 1; i <= 9; ++i) for (int j = 1; j <= 9; ++j) //如果在当前方格内,则改变信息 if (canvas[i][j].pic != picture::barrier && (m.x - canvas[i][j].x) * (m.x - canvas[i][j].x) + (m.y - canvas[i][j].y) * (m.y - canvas[i][j].y) <= (pix - 4) * (pix - 4) / 4) { canvas[i][j].pic = picture::barrier; stepS++; bfs({ cat.x,cat.y,0,0 }); return; } } } } //不需要鼠标的操作,判断猫是否跑掉 void dataChangeWithoutMouseHit() { if (cat.x == 1 || cat.y == 1 || cat.x == 9 || cat.y == 9) { show(); HWND wnd = GetHWnd(); if (MessageBox(wnd, L"游戏结束。\n神经猫跑掉了!,重玩一局吗", L"询问", MB_YESNO | MB_ICONQUESTION) == IDYES) main(); else exit(-1); } } int main() { initial(); while (true) { show(); dataChangeWithMouseHit(); dataChangeWithoutMouseHit(); Sleep(20); } return 0; }

大家赶紧去动手试试吧!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至957126978@qq.com举报,一经查实,本站将立刻删除。

攻略排行榜

  • 地铁2033重制版怪物图鉴(FPS游戏地铁2033评测)地铁2033重制版怪物图鉴(FPS游戏地铁2033评测)
    steam开放一天的限时活动,可以免费领取游戏:地铁2033。很多玩家包括小编都喜加一了。在这段时间中,小编已经打通了本游戏的双结局,下面来带大家了解地铁2033的宏大世界观。 《地铁2033》游戏改编自俄罗斯作家Dmitry Glukhovsky的同名小说,之前在中国也发行了小说的中文版。但是游戏和小说有点不相同的就是剧情是不一样的。本篇文章将着重介绍游戏的剧情和世界观。 背景故事:2013年世界爆发了毁灭性的核大战(根据wiki百科,应该是两个中东国家的核弹互射引发了全球范围内的核交换)。俄罗斯的导弹发射前就遭到了核打击,地表上几乎全部的人类都被消灭。在莫斯科,反导系统成功拦截了大部分导
    阅读:742024-05-26
  • 盲目之恋游戏结局什么意思(盘点五款虐心的恋爱游戏)盲目之恋游戏结局什么意思(盘点五款虐心的恋爱游戏)
    爱情一直都是人类所渴望的东西。渴望爱情不仅仅是荷尔蒙分泌导致的结果,更是因为恋爱能够让两个在这个世界上独一无二的人相互扶持,获得心灵上的归宿,一起走完人生的坎坷之路。今天小编给大家介绍的就是五款恋爱游戏,在这些游戏里你能找到恋爱的感觉,但是也会因为一些剧情而感到虐心。 一、露西她所期望的一切 推荐理由:《露西她所期望的一切》是一款人机恋爱题材的双结局文字恋爱游戏。作为小成本作品,游戏能讨论的人工智能内容仅仅是蜻蜓点水,比起辐射4或是电视剧《西部世界》这样有深度内涵的自然不能相提并论,但好处就在于它呈现了小人物与高等人工智能之间的家庭式的对话,过程温馨且不必在设定上太过费劲,这样的小制作能引起
    阅读:292024-05-25
  • wow翡翠林稀有怪(魔兽世界野外平民级宠物攻略)wow翡翠林稀有怪(魔兽世界野外平民级宠物攻略)
    以下获得方法几乎都是野外宠物对战获得,简单轻松,跑图抓捕即可。 在此之前,先分享一个插件:BattlePetBreedID 有没有遇到这么一个问题: 这只小宠物到底,有几种类型? 成长到最后,属性值又是多少? 这只小宠物到底是不是最好的呢? 而此插件就很好的解决这3个问题,只要打开宠物列表,移动鼠标到宠物图标上,就会有详细信息,未抓捕的也可以哦! P : power 攻击力 H : health 生命值 S : speed 速度 B: Balanced 平衡 PP:满攻击. SS:满速. HH:满生命 BB:全均衡 PS:高攻带速度,以此类推。 同样此插件属于单体插件,一般插件盒子都没有携带
    阅读:232024-05-24
  • 金庸群侠传笑傲江湖攻略(金庸群侠传3D笑傲江湖主线)金庸群侠传笑傲江湖攻略(金庸群侠传3D笑傲江湖主线)
    在我们进入《金庸群侠传》世界之后,接到的第一个任务就是来自《笑傲江湖》。 林平之和田伯光是我们最初的人生导师。一位教你怎么风流快活,一位则教你如何禁欲提升武学修为。剧情发展到中期我们就会发现,前期的这些人物都是无足轻重的,对剧情没有多大影响。 《笑傲江湖》是游戏中最难获取的小说,并不是说获取的途径有多繁琐,而是要将所有的任务触发需要走很多重复的路。 首先去悦来客栈找到令狐冲,然后他表示要喝好酒。我们去梅庄拿到梨花酒,然后去欧阳克这边拿到翡翠杯之后,令狐冲就能跟我们上路了。 去思过崖就能拿到《独孤九剑》,将剑法练到10级之后,这条主线就算是正式开始。 先后去拜访衡山、衡山、嵩山、泰山和华山,这
    阅读:232024-05-23
  • 刺客信条2详细图文攻略(刺客信条2第五关通关 )刺客信条2详细图文攻略(刺客信条2第五关通关 )
    刺客信条2的第五章是怎么通关的嘞?很多刚入手的新手宝宝一定还不是很清楚,今天小编为大家带来的是第五章通关教程攻略,感兴趣的宝宝们快来一起参与吧! 一、刺客信条2第五章通关教程攻略: 1、小弟有点小钱了先去铁匠屋买东西 2、好多武器可选 先买把速度快的比较实用 3、随便和那穿珠宝的哈完就去找达分奇聊完就获得毒袖剑了 4、EVASIVE MANEUVERS跟叔叔学躲技、空手夺刃这两招对付金甲武士很有用 a、THE CROW DOES NOT MAKE THE MONK直接杀进去取修士的命就好 b、BEHINE CLOSE DOOR这人因为随着相关人一一被杀他就赫着躲在要塞内 c、这边不管警卫有多
    阅读:402024-05-23
  • 斗地主心得攻略(斗地主拆牌三小招)斗地主心得攻略(斗地主拆牌三小招)
    斗地主拆牌攻略来啦 夜微凉,月如霜 秋意浓,岁月柔 秋高气爽无疑是秋天最好的解说 呼吸一下新鲜空气 打开窗 走出门 你感受到秋天了吗? 风是秋天的信差 享受秋风裹挟而来的自在 这一刻的“闲逸”时光 快乐是属于我们的 小逸这时 不得不来几场刺激欢快的斗地主喽~ 许久没玩了 我怕再不捡起来 “牌神”称号可能得易主 (开玩笑自封的啦~) 不过关于技术这方面小逸我还真是 有话说~ 玩斗地主老是输怎么办? 牌还不错也赢不了? 小牌太多肯定要输? 大家也会遇到这样的问题吗 “宁愿输也不愿拆牌” 可要避免这个想法哟~ 今天小逸就来给大家分享 斗地主拆牌攻略 牌拆的好 残局也能赢~ 一、拆连对 斗地主拆牌的
    阅读:232024-05-23
  • ps4蝙蝠侠合集攻略(蝙蝠侠 阿卡姆合集评测)ps4蝙蝠侠合集攻略(蝙蝠侠 阿卡姆合集评测)
    《蝙蝠侠 阿卡姆合集》实体版9月发售 PS4将追加独占内容 亚马逊英国部门今天在商店上列出了《蝙蝠侠 阿卡姆合集》的实体版预售信息,根据预售信息显示,这款游戏将会在今年9月推出,对应PS4和Xbox one平台。 《蝙蝠侠 阿卡姆合集》是一款收录了《阿卡姆疯人院》和《阿卡姆之城》以及《阿卡姆骑士》三部作品的动作游戏,在去年11月推出过下载版。游戏中,玩家将会扮演蝙蝠侠,在哥谭市的阿卡姆疯人院对抗关在这里的反派们。游戏中收录了多名来自漫画中的反派角色,包括小丑、哈莉、毒藤女、谜语人、双面人和企鹅人等等。另外蝙蝠侠的盟友猫女、戈登等人也会在游戏中登场。两部作品的故事互相连接,给玩家讲述一个完整的
    阅读:552024-05-22
  • 口袋妖怪梦特性是几代出的(宝可梦基础设定之特性)口袋妖怪梦特性是几代出的(宝可梦基础设定之特性)
    接触过第四世代《宝可梦 钻石/珍珠》的训练家们,如果抓到过那只远古“三神柱”之首的雷吉奇卡斯并且使用过它,肯定都对这只披着“远古遗迹神兽”外衣的最弱神兽印象深刻。 慢启动特性惹的祸 雷吉奇卡斯作为拉动了宝可梦世界的大陆,构成如今宝可梦大陆组成部分的传说级宝可梦,来头和名声大到无法想象。本以为种族值之和达到670,可以与封面一级神兽相媲美的它,在进行战斗时却异常疲软,无论训练家怎么对其配招都打不出它面板上的威力。这正是由于雷吉奇卡斯的唯一特性“慢启动”搞得鬼。 我们先来看看特性“慢启动”是怎么回事:慢启动特性的宝可梦出场时,进入慢启动状态。慢启动状态下,攻击与速度减半;慢启动状态会持续五个回合
    阅读:552024-05-22
  • 光环4剧情能自定义护甲吗(光环4pc中文版)光环4剧情能自定义护甲吗(光环4pc中文版)
    光环4(HALO 4)又名光晕4,是由343工作组制作,Microsoft Studios发行的一款第一人称射击游戏,也是《光环》系列推出系列作品的第四代。该作品最早于2012年登陆Xbox平台,现如今整合上架steam平台。 第四代游戏延续了前几部作品的故事背景和玩法,承袭了之前十分成功而且极度受到赞扬的游戏前作,具有如此宽泛的内容。再加上动作本身如此的突出,以至于一经发售就赢得了广大粉丝和玩家的好评。除此之外,这款游戏具有值得夸耀的卓越画面、具有极高重玩性的战役,以及在这个平台的射击游戏中迄今最出色、最完善的在线多人游戏模式,且延续了史诗般的冒险故事。 与此同时,光环4游戏中的场景和主角
    阅读:272024-05-22
  • 异域狂想曲简体中文版(异域镇魂曲游戏攻略)异域狂想曲简体中文版(异域镇魂曲游戏攻略)
    《异域镇魂曲》这款经典游戏想必80后玩家绝对不会陌生吧。今天就给大家讲讲这款游戏的开发商黑岛工作室的“起”与“结”。2003年12月9日,一个借以黑岛老员工之口的消息传遍了网络,黑岛工作室已被关闭。面对沸腾了的角色扮演游戏玩家们,虽然Interplay马上给出了极其暧昧的官方说法,但不管是对此感到愤怒愤怒的人也好、失意的人也罢,对此深有感触的玩家心中都切实的明白到——曾经的黑岛消失了。虽然我们知道没有什么是会长盛不衰,但是辐射、博德之门、异域镇魂曲在这些闪耀光芒的照射下黑岛竟然就这样突然的迎来了“曲终人散”的一刻,实在是玩家们难以想象的。6年,在这一个并不算漫长的时间里,曾经充满活力与创意的
    阅读:572024-05-22