大鱼吃小鱼代码c++

时间: 2023-12-10 21:32:36 浏览: 91
这是一个使用C++编写的大鱼吃小鱼游戏源代码程序。该程序使用了EasyX库,并且可以在CodeBlocks IDE中运行。该程序是作者在大一时期完成的funcode课设,也是作者进入大学本科后完成的第一个比较完整的程序。作者在编写这个程序时遇到了一些困难,主要是因为刚接触完C++的基础语法,就开始去编写这样一个对当时的作者来说“十分不可思议”的“大程序”。包括要去学习一个新的库的用法,程序的组织等等。如果你对这个程序感兴趣,可以通过引用中提供的链接下载工程文件并进行学习和实践。
相关问题

大鱼吃小鱼游戏C++代码

下面是一份大鱼吃小鱼游戏的C语言代码,供您参考: ```c #include <stdio.h> #include <stdlib.h> #include <time.h> #define SIZE 10 // 游戏地图大小 #define FISH_NUM 20 // 初始小鱼数量 #define BIG_FISH 1 // 大鱼标记 #define SMALL_FISH 2 // 小鱼标记 int map[SIZE][SIZE]; // 游戏地图 int fish_num = FISH_NUM; // 剩余小鱼数量 int score = 0; // 得分 // 在地图上随机生成指定数量的小鱼 void init_fish() { int i, x, y; for (i = 0; i < FISH_NUM; i++) { x = rand() % SIZE; y = rand() % SIZE; if (map[x][y] == 0) { map[x][y] = SMALL_FISH; } else { i--; } } } // 在地图上随机生成一个大鱼 void init_big_fish() { int x, y; while (1) { x = rand() % SIZE; y = rand() % SIZE; if (map[x][y] == 0) { map[x][y] = BIG_FISH; break; } } } // 打印游戏地图 void print_map() { int i, j; for (i = 0; i < SIZE; i++) { for (j = 0; j < SIZE; j++) { switch (map[i][j]) { case 0: printf(". "); break; case BIG_FISH: printf("B "); break; case SMALL_FISH: printf("s "); break; } } printf("\n"); } } // 判断大鱼是否能吃掉小鱼 int can_eat(int big_x, int big_y, int small_x, int small_y) { if (big_x == small_x && abs(big_y - small_y) == 1) { return 1; } if (big_y == small_y && abs(big_x - small_x) == 1) { return 1; } return 0; } // 大鱼吃小鱼 void eat(int big_x, int big_y, int small_x, int small_y) { map[small_x][small_y] = 0; fish_num--; score++; map[big_x][big_y] = BIG_FISH; } int main() { srand((unsigned int)time(NULL)); // 设置随机种子 init_fish(); // 初始化小鱼 init_big_fish(); // 初始化大鱼 while (fish_num > 0) { print_map(); // 打印游戏地图 int big_x, big_y, small_x, small_y; printf("请输入大鱼的坐标x,y:"); scanf("%d,%d", &big_x, &big_y); if (big_x < 0 || big_x >= SIZE || big_y < 0 || big_y >= SIZE) { printf("坐标不合法!\n"); continue; } if (map[big_x][big_y] != BIG_FISH) { printf("该位置没有大鱼!\n"); continue; } printf("请输入小鱼的坐标x,y:"); scanf("%d,%d", &small_x, &small_y); if (small_x < 0 || small_x >= SIZE || small_y < 0 || small_y >= SIZE) { printf("坐标不合法!\n"); continue; } if (map[small_x][small_y] != SMALL_FISH) { printf("该位置没有小鱼!\n"); continue; } if (!can_eat(big_x, big_y, small_x, small_y)) { printf("大鱼不能吃小鱼!\n"); continue; } eat(big_x, big_y, small_x, small_y); // 大鱼吃小鱼 } printf("恭喜您获得了%d分!\n", score); return 0; } ``` 在该代码中,我们使用二维数组来表示游戏地图。地图大小为10x10,初始小鱼数量为20。大鱼和小鱼的标记分别为1和2。游戏开始时,我们在地图上随机生成指定数量的小鱼和一个大鱼。 在每个回合中,我们先打印游戏地图,然后要求玩家输入大鱼和小鱼的坐标。如果输入的坐标不合法或者该位置没有相应的鱼,则要求玩家重新输入。如果大鱼不能吃小鱼,则提示玩家重新输入,否则大鱼将吃掉小鱼,得分加一。 当所有小鱼都被吃掉后,游戏结束,显示得分。

大鱼吃小鱼c++代码

以下是一个使用EasyX库实现的大鱼吃小鱼游戏的C++代码示例: ```cpp #include <graphics.h> #include <conio.h> #include <time.h> #include <stdlib.h> #include <stdio.h> #define MAX_FISH 20 #define MAX_SHARK 3 IMAGE bg, fish[4], shark[4]; int fish_x[MAX_FISH], fish_y[MAX_FISH], fish_kind[MAX_FISH], fish_speed[MAX_FISH]; int shark_x[MAX_SHARK], shark_y[MAX_SHARK], shark_kind[MAX_SHARK], shark_speed[MAX_SHARK]; int score = 0; void init(); void show(); void updateWithoutInput(); void updateWithInput(); bool isCollide(int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2); int main() { init(); while (true) { show(); updateWithoutInput(); updateWithInput(); } return 0; } void init() { srand((unsigned)time(NULL)); initgraph(640, 480); loadimage(&bg, _T("bg.jpg")); loadimage(&fish[0], _T("fish1.png")); loadimage(&fish[1], _T("fish2.png")); loadimage(&fish[2], _T("fish3.png")); loadimage(&fish[3], _T("fish4.png")); loadimage(&shark[0], _T("shark1.png")); loadimage(&shark[1], _T("shark2.png")); loadimage(&shark[2], _T("shark3.png")); loadimage(&shark[3], _T("shark4.png")); for (int i = 0; i < MAX_FISH; i++) { fish_x[i] = rand() % 540 + 50; fish_y[i] = rand() % 380 + 50; fish_kind[i] = rand() % 4; fish_speed[i] = rand() % 4 + 1; } for (int i = 0; i < MAX_SHARK; i++) { shark_x[i] = rand() % 540 + 50; shark_y[i] = rand() % 380 + 50; shark_kind[i] = rand() % 4; shark_speed[i] = rand() % 4 + 1; } } void show() { putimage(0, 0, &bg); for (int i = 0; i < MAX_FISH; i++) { putimage(fish_x[i], fish_y[i], &fish[fish_kind[i]]); } for (int i = 0; i < MAX_SHARK; i++) { putimage(shark_x[i], shark_y[i], &shark[shark_kind[i]]); } settextcolor(WHITE); settextstyle(20, 0, _T("宋体")); TCHAR s[100]; _stprintf_s(s, _T("得分:%d"), score); outtextxy(10, 10, s); } void updateWithoutInput() { for (int i = 0; i < MAX_FISH; i++) { fish_x[i] += fish_speed[i]; if (fish_x[i] > 640) { fish_x[i] = -fish[i].getwidth(); fish_y[i] = rand() % 380 + 50; fish_kind[i] = rand() % 4; fish_speed[i] = rand() % 4 + 1; } } for (int i = 0; i < MAX_SHARK; i++) { shark_x[i] += shark_speed[i]; if (shark_x[i] > 640) { shark_x[i] = -shark[i].getwidth(); shark_y[i] = rand() % 380 + 50; shark_kind[i] = rand() % 4; shark_speed[i] = rand() % 4 + 1; } } } void updateWithInput() { if (_kbhit()) { char ch = _getch(); if (ch == ' ') { for (int i = 0; i < MAX_FISH; i++) { if (isCollide(fish_x[i], fish_y[i], fish[fish_kind[i]].getwidth(), fish[fish_kind[i]].getheight(), 320, 240, shark[shark_kind[0]].getwidth(), shark[shark_kind[0]].getheight())) { score++; fish_x[i] = -fish[fish_kind[i]].getwidth(); fish_y[i] = rand() % 380 + 50; fish_kind[i] = rand() % 4; fish_speed[i] = rand() % 4 + 1; } } } } for (int i = 0; i < MAX_SHARK; i++) { if (isCollide(shark_x[i], shark_y[i], shark[shark_kind[i]].getwidth(), shark[shark_kind[i]].getheight(), 320, 240, shark[shark_kind[0]].getwidth(), shark[shark_kind[0]].getheight())) { score = 0; break; } } } bool isCollide(int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2) { if (x1 + w1 < x2 || x1 > x2 + w2 || y1 + h1 < y2 || y1 > y2 + h2) { return false; } return true; } --相关问题--:

相关推荐

最新推荐

recommend-type

基于SpringBoot框架仿stackOverflow网站后台开发.zip

基于springboot的java毕业&课程设计
recommend-type

基于SpringBoot洗衣店管理系统.zip

基于springboot的java毕业&课程设计
recommend-type

【优化覆盖】算术算法求解传感器覆盖优化问题【含Matlab源码 2436期】.zip

【优化覆盖】算术算法求解传感器覆盖优化问题【含Matlab源码 2436期】.zip
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

SQL怎么实现 数据透视表

SQL可以通过使用聚合函数和GROUP BY子句来实现数据透视表。 例如,假设有一个销售记录表,其中包含产品名称、销售日期、销售数量和销售额等信息。要创建一个按照产品名称、销售日期和销售额进行汇总的数据透视表,可以使用以下SQL语句: ``` SELECT ProductName, SaleDate, SUM(SaleQuantity) AS TotalQuantity, SUM(SaleAmount) AS TotalAmount FROM Sales GROUP BY ProductName, SaleDate; ``` 该语句将Sales表按照ProductName和SaleDat
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依
recommend-type

实现实时监控告警系统:Kafka与Grafana整合

![实现实时监控告警系统:Kafka与Grafana整合](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X2pwZy9BVldpY3ladXVDbEZpY1pLWmw2bUVaWXFUcEdLT1VDdkxRSmQxZXB5R1lxaWNlUjA2c0hFek5Qc3FyRktudFF1VDMxQVl3QTRXV2lhSWFRMEFRc0I1cW1ZOGcvNjQw?x-oss-process=image/format,png) # 1.1 Kafka集群架构 Kafka集群由多个称为代理的服务器组成,这