看了书后有一个贪吃蛇,突然觉得自己也可以写这类代码。但是用system("cls")会导致各种闪屏,所以用了gotoxy()函数。在编写过程中,我明白了框架清晰的重要性。

#include <cstdio>
#include <windows.h>
#include <conio.h>
#include <process.h>#define Weigh 75
#define Heigh 25
#define BeeLine 3
#define BulletMaxAmount 10#define Upper 72
#define Downer 80
#define Lefter 75
#define Righter 77
#define ESC 27
#define B 98const int GameSpeed=200;
const int BeeLoop=10;
const int CarSize=4;
const int BeeSize=2;bool Printing;int BeeMaxAmount;
int Life;
bool Finish;
bool Win;
int JudgeMap[Heigh][Weigh]={0};
void Kill(int);
void gotoxy(int x,int y){ COORD c; c.X=x;c.Y=y; SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE),c);
}
void setcolor(int fg,int bg){ WORD wc; HANDLE h=GetStdHandle(STD_OUTPUT_HANDLE); bg<<=4; wc=(fg & 0x000f )|(bg & 0x00f0); SetConsoleTextAttribute(h,wc);
}
struct Bullet{int x,y;int vx,vy;int Owner;bool inUse;Bullet(){x=0,y=0,vx=0,vy=0,Owner=0,inUse=false;}void Show(){while(Printing);Printing=true;gotoxy(x,y);printf("+");Printing=false;}void Run(){gotoxy(x,y);JudgeMap[y][x]=0;printf(" ");int x0,x1,y0,y1;if(vx>0){x0=x;x1=x+vx;}else{x0=x+vx;x1=x;}if(vy>0){y0=y;y1=y+vy;}else{y0=y+vy;y1=y;}if(x0<0)x0=0;if(x1>=Weigh)x1=Weigh-1;if(y0<0)y0=0;if(y1>=Heigh)y1=Heigh-1;for(int i=y0;i<=y1;i++){for(int j=x0;j<=x1;j++){if(JudgeMap[i][j]&&JudgeMap[i][j]==2&&Owner==3){Life--;inUse=false;break;}if(JudgeMap[i][j]&&JudgeMap[i][j]>=3&&Owner==2){Kill(JudgeMap[i][j]-3);inUse=false;break;}}}x=x+vx;y=y+vy;if(x<0||x>Weigh)inUse=false;if(y<0||y>Heigh)inUse=false;if(inUse)Show();}
}BulletSet[BulletMaxAmount];
struct Car{int x;void Show(){while(Printing);Printing=true;gotoxy(0,Heigh-1);for(int i=0;i!=Weigh;i++)printf("%c",i<=x+CarSize&&i>=x-CarSize?'#':' ');for(int i=0;i!=Weigh;i++)JudgeMap[Heigh-1][i]=i<=x+CarSize&&i>=x-CarSize?2:0;Printing=false;}void Left(){x-=3;Show();}void Right(){x+=3;Show();}void Attack(){for(int i=0;i!=BulletMaxAmount;i++){if(!BulletSet[i].inUse){BulletSet[i].x=x;BulletSet[i].y=Heigh-1;BulletSet[i].Owner=2;BulletSet[i].vx=0;BulletSet[i].vy=-3;BulletSet[i].inUse=true;break;}}}
}MyCar;
struct Bee{int index;int x,y;bool isDead;Bee(int _x=0,int _y=0){x=_x;y=_y;isDead=false;}void Show(){while(Printing);Printing=true;for(int i=0;i<BeeSize;i++){gotoxy(x,y+i);int Loop=BeeSize;while(Loop--){printf("*");JudgeMap[y+i][x+Loop]=3+index;}}Printing=false;}void Destroy(){while(Printing);Printing=true;for(int i=0;i<BeeSize;i++){gotoxy(x,y+i);int Loop=BeeSize;while(Loop--){printf(" ");JudgeMap[y+i][x+Loop]=0;}}x=-1;y=-1;isDead=true;Printing=false;}void Right(){x++;Show();int Loop=BeeSize;while(Loop--){while(Printing);Printing=true;gotoxy(x-1,y+Loop);JudgeMap[y+Loop][x-1]=0;printf(" ");Printing=false;}}void Left(){x--;Show();int Loop=BeeSize;while(Loop--){while(Printing);Printing=true;gotoxy(x+BeeSize,y+Loop);printf(" ");JudgeMap[y+Loop][x+BeeSize]=0;Printing=false;}}void Attack(){if(isDead)return;for(int i=0;i!=BulletMaxAmount;i++){if(!BulletSet[i].inUse){BulletSet[i].x=x;BulletSet[i].y=y;BulletSet[i].vx=(MyCar.x-x)/5;BulletSet[i].vy=(Heigh-1-y)/5;BulletSet[i].Owner=3;BulletSet[i].inUse=true;break;}}}
}BeeSet[100];
void Kill(int index){BeeSet[index].Destroy();
}void GameJudge(){if(Life<0){Win=false;Finish=true;}for(int i=0;i!=BeeMaxAmount;i++){if(!BeeSet[i].isDead)return;}Win=true;Finish=true;
}
void UserInputControl(void* args){char ch;while(ch!=ESC&&!Finish){while(Printing);ch=getch();if(ch==Lefter && MyCar.x-CarSize/2>0)MyCar.Left();if(ch==Righter && MyCar.x+CarSize/2<Weigh)MyCar.Right();if(ch==B)MyCar.Attack();Sleep(10);}Finish=true;
}
void RunBullet(){for(int i=0;i!=BulletMaxAmount;i++){if(BulletSet[i].inUse){BulletSet[i].Run();}}
}
void RunBee(int Direction){for(int i=0;i!=BeeMaxAmount;i++){if(!BeeSet[i].isDead){if(Direction)BeeSet[i].Left();elseBeeSet[i].Right();}}
}
void TimeLoop(bool next){static int LoopAmount=0;static int BeeDirection=0;if(!(++LoopAmount%BeeLoop)){BeeDirection=BeeDirection?0:1;LoopAmount=0;while(Printing);Printing=true;system("cls");Printing=false;}if(!(LoopAmount%5)){int CrazyBee=rand()%BeeMaxAmount;BeeSet[CrazyBee].Attack();}RunBee(BeeDirection);RunBullet();MyCar.Show();GameJudge();Sleep(GameSpeed);if(next)TimeLoop(next&&(!Finish));
}
void initialize(){Life=3;Finish=false;Win=false;_beginthread(UserInputControl, 0, NULL ); { //Print Bee~~~int Loop=0;int Now=0;while(Loop<BeeLine){int LineAmount=Weigh/(2*BeeSize)-1-2*Loop;for(int i=0;i!=LineAmount;i++){BeeSet[Now].x=2*(1+i+Loop)*BeeSize;BeeSet[Now].y=BeeSize*(1+2*Loop);BeeSet[Now].index=Now;BeeSet[Now++].Show();}BeeMaxAmount+=LineAmount;Loop++;}}MyCar.x=Weigh/2;MyCar.Show();}
void test(){}
int main(){initialize();TimeLoop(true);system("cls");gotoxy(0,0);printf("%s\n",Win?"Congratulations!":"Sorry for Lose.");getchar();return 0;
}

一个小蜜蜂游戏的源代码相关推荐

  1. JS原生编写飞机大战小蜜蜂游戏

    javascript设计模式之单体模式--飞机大战小蜜蜂游戏 单体是一个用来划分命名空间并将一批相关的属性和方法组织在一起的对象,如果他可以被实例化,那么他只能被实例化一次. 单体模式是javascr ...

  2. Python 写一个俄罗斯方块游戏

    使用 Python 的 PyGame 库写一个俄罗斯方块游戏的逐步指南 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例 ...

  3. python简单小游戏代码教程,python小游戏程序源代码

    球球各位大神怎么用python写一个猜词小游戏的代码? key = input('请输入一个单词:')description = input('输入单词描述:')chance = 5mark = 5p ...

  4. 用python做一个简单的游戏,用python写一个小游戏

    大家好,本文将围绕如何用python做一个简单的小游戏展开说明,python编写的入门简单小游戏是一个很多人都想弄明白的事情,想搞清楚用python做一个简单的游戏需要先了解以下几个事情. 1.Pyt ...

  5. 用Python编了一个鱿鱼游戏

    用Python编了一个鱿鱼游戏 关键词:python, pygame, squid game, 鱿鱼游戏 python 源代码下载:点击下载squidgame1.zip文件 python 开源项目地址 ...

  6. 双人对战的球类游戏ios源代码项目

    双人对战的球类游戏源代码,这个是一款双人对战的ios球类游戏源代码.游戏的源代码也比較具体的,我们在屏幕上下看到各有一个球门.内有一球,两边通过控制轮盘使球进入对方的球门的.事实上玩法也非常easy的 ...

  7. 迷宫游戏c语言源程序,C语言迷宫游戏设计(源代码+论文)

    C语言迷宫游戏设计(源代码+论文) 如有需要请联系 QQ:958035640 摘 要 随着科技的日益发展,计算机信息知识越来越被人们所认知和使用,在当今知识爆炸的时代计算机毫不疑问成为人们常用的日常工 ...

  8. 一个拼图游戏,包含很多内容。

    Hands-On Lab 构建您第一个 Windows Phone 7 应用程序 实验版本号:  1.1.0 最后更新:       1/30/2012 yi目录 概述... 3 练习 1: 利用Mi ...

  9. linux小蜜蜂游戏,如何在老板眼皮底下玩游戏的必读文章:献给Linux爱好者12个牛叉的基于终端的游戏...

    当你成为了一个linux超级用户,你肯定会使用命令行,因为命令行让你能够更好的控制linux系统. 因此当你作为一个控制台管理员或者是一个喜欢从终端控制linux的用户,你将会在终端中花费相当长的时间 ...

最新文章

  1. pyqt5点击按钮后关联程序一直运行指导再次点击按钮_揭秘支付宝小程序调试方法...
  2. python3 实现 php bin2hex 函数
  3. unity menuitem_Unity热更_打AssetBundles包
  4. 糖尿病动物模型知识点整理
  5. Ribbon-2通过代码自定义配置ribbon
  6. 数据结构:用栈实现表达式的转换(文字描述+详细步骤示例)——中缀转后缀
  7. SAP UI5 应用开发教程之五十六 - SAP UI5 树控件(tree)的开发试读版
  8. [转]Responsive Tables Demo
  9. 大样品随机双盲测试_训练和测试样品生成
  10. 基于matlab的大米,大米颗数计算MATLAB软件
  11. MyBatis动态插入的实现
  12. Android 获取联系人列表
  13. spring jpa查询视图
  14. opengl代码实例_一步步学OpenGL(22) -《OpenGL使用Assimp库导入3d模型》
  15. 易语言怎么给手机发短信,对接验证码短信接口DEMO示例
  16. 数据库学生表,课程表,选课表
  17. Excel 18个快捷键
  18. 用计算机唱歌弹奏china,新目标英语专题练习:句型转换(附答案)
  19. 知乎问题:北京,2017,多少k的java web程序员应该懂多线程和jvm优化?
  20. 《激光杂志》投稿经验

热门文章

  1. 黑鲨3能用鸿蒙系统吗,黑鲨游戏手机3支持语音操控:没有三头六臂照样吃鸡
  2. android hud软件,手机HUD靠谱软件选哪些?_手机_手机生活应用-中关村在线
  3. HbuilderX 快捷键修改
  4. Java计算机毕业设计水果购物商城源码+系统+数据库+lw文档
  5. java mocked,JMockit 中被 Mocked 的对象属性及方法的默认值
  6. Typecho炫彩鼠标插件:HoerMouse
  7. 京东实习笔试——拍卖
  8. 开通公众号啦:java4all
  9. 我要做-微处理器嵌入式系统设计师
  10. 微信公众平台账号迁移公证书如何办理?GDP30强城市收据全新出炉