大一上学期大作业贪吃蛇
************准备借此记录下自己的成长历
大一上学期就要结束 了
最后一个的c++大作业是 贪吃蛇 看了好多博主 百度了好多东西
又结合自己写出了这个代码
以下是自己写的代码
#include<Windows.h>
#include<cstdio>
#include<conio.h> //控制台
#include<iostream>
#include <vector>
#include<fstream>
#include<iomanip>
#define a 27
using namespace std;
enum { U , R , D , L , S};//上 右 下 左
class map{protected:int map1[a+2][a+2];int color;public:void Setcolor(int n_color);void flagcolor();void Setmap();map(){for(int i=0;i<a+2;i++){for(int j=0;j<a+2;j++)map1[i][j]=0;}}
};
void map::flagcolor()
{system("cls");cout<<"颜色 大全"<<endl;cout<<"1.原色"<<endl;cout<<"2.白色"<<endl;cout<<"3.红色"<<endl;cout<<"4.绿色"<<endl;cout<<"5.蓝色"<<endl;cout<<"6.黄色"<<endl;cout<<"7.粉色"<<endl;cout<<"8.青色"<<endl;cout<<"其他数选择 原色"; cin>>color;this->Setcolor(color);
}
void map::Setcolor(int n_color)
{switch(n_color){case 1: SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY); break;//原色case 2:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE);break;//设置三色相加 白色 case 3:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|BACKGROUND_RED);break;//设置红色//红色(设置的颜色为红色)<<endl;case 4:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|BACKGROUND_GREEN);break;//设置绿色case 5:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|BACKGROUND_BLUE);break;//蓝色case 6:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_GREEN);break;//设置红色和绿色相加黄色case 7:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_BLUE);break;//设置红色和蓝色相加粉色case 8:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|BACKGROUND_GREEN|BACKGROUND_BLUE);break;//设置绿色和蓝色相加青色 default:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY); break;//原色}
}
void map::Setmap()
{for(int i=1;i<=a;i++){for(int j=1;j<=a;j++)map1[i][j]=1;}this->Setcolor(color);for(int i=0;i<a+2;i++){for(int j=0;j<a+2;j++){if(map1[i][j]==1)cout<<" ";else cout<<"■" ;}cout<<endl;}
}
typedef struct snake
{int x;int y;
}snake; /*食物蛇头坐标*/
class Snake:public virtual map
{protected:int ch;//键盘获取int flag_live;int food[2];int tail[2];vector<snake>array;int len;//蛇长度;public:void newSnake(){array.clear();ch=U;flag_live=1;len=2;snake d1,d2;d1.x =12;d1.y =12;d2.x=13;d2.y=13;array.push_back(d1);array.push_back(d2);};void gotoxy(int x,int y);void make_Food();void make_Snake();void alive_Snake();void upgrade_Snake();void run_Snake();
};
void Snake::gotoxy(int x ,int y)
{COORD c;//定义结构体变量c.X = 2*x;c.Y = y;HANDLE handle;//定义一个句柄handle = GetStdHandle(STD_OUTPUT_HANDLE);//获得输出设备的句柄SetConsoleCursorPosition(handle,c);//定位句柄控制光标
}
void Snake::make_Snake()
{this->Setcolor(color);this->gotoxy(tail[0],tail[1]);cout<<" "; for(int i=0;i<len;i++){ gotoxy(array[i].x,array[i].y);if(i==0)cout<<"☆"<<endl;elsecout<<"※";}
}
void Snake::run_Snake()
{tail[0]=array[len-1].x;tail[1]=array[len-1].y;for(int i=array.size()-1;i>0;i--){array[i].x=array[i-1].x;array[i].y=array[i-1].y;}if (GetAsyncKeyState(VK_UP) && ch != D){ch = U;}else if (GetAsyncKeyState(VK_DOWN) && ch!= U){ch = D;}else if (GetAsyncKeyState(VK_LEFT) && ch!= R){ch = L;}else if (GetAsyncKeyState(VK_RIGHT) && ch != L){ch = R;}else if(GetAsyncKeyState(VK_SPACE)) {ch=S;}switch(ch){case U:array[0].y--;break;case R:array[0].x++;break;case D:array[0].y++;break;case L:array[0].x--;break;case S:for(int i=1;i<len-1;i++){array[i].x=array[i+1].x;array[i].y=array[i+1].y;}array[len-1].x=tail[0];array[len-1].y=tail[1];break;}}
void Snake::make_Food()
{food[0]=rand()%a+1;food[1]=rand()%a+1;for(int i=0;i<array.size();i++){if(array[i].x==food[0]&&array[i].y==food[1])make_Food();} this->gotoxy(food[0],food[1]);this->Setcolor(3);//果实为红色; cout<<"●";
}
void Snake::upgrade_Snake()
{if(array[0].x==food[0]&&array[0].y==food[1]){ snake tmp = array.back();//增加一个蛇身单位与蛇尾的状态一array.push_back(tmp);//新增加的一个蛇单位与蛇尾相连//食物被吃掉后重新设置一个新的食物len++;this->make_Food();}
}
void Snake::alive_Snake()
{for(int i=1;i<array.size();i++){if(array[i].x==array[0].x&&array[i].y==array[0].y)flag_live=0;}if(array[0].x==a+1||array[0].y==a+1||array[0].x==0||array[0].y==0)flag_live=0;
}
class Game:public virtual Snake
{protected:int num;//级别//写到这里 记下级别;int score; Game(){num=1;score=0;};public:void play();void Setnum();
};
void Game::Setnum()
{ system("cls");cout<<"请开始选择你的游戏难度:";cout<<"1.小儿科"<<endl;cout<<"2.简单"<<endl;cout<<"3.不太简单了哦"<<endl;cout<<"4.开始难了"<<endl;cout<<"5.真的不简单了啊"<<endl;cout<<"6.地狱级别了哦"<<endl;cout<<"6++++.你会后悔的"<<endl;cin>>num;
}
void Game::play()
{this->Setmap();this->newSnake();this->make_Food();this->gotoxy(30,7);cout<<"当前分数:";this->flag_live=1;while(this->flag_live==1){this->Setcolor(color);this->run_Snake();this->make_Snake();this->upgrade_Snake();this->alive_Snake();score=(len-2)*num*num;this->Setcolor(1);this->gotoxy(32,8);cout<<score;Sleep(abs(200-0.1*num*score));}
}
class Player :public virtual Game
{ int flag_G;//选择方式;char name[10][10];//龙王榜int num_play[10];char playname[10];public:Player(){ifstream look_hero("heronum11.txt");for(int i=0;i<10;i++){if(i==1&&look_hero.eof())/*用的Devc++因为会有一些小的bug所以我用的i==1 0的时候可能因为\r之类的影响*/{i=0;look_hero.close(); ofstream look_hero2("heronum11.txt");look_hero2<<"纳什男爵 "<<9999<<endl;look_hero2<<"蛇精 "<<895<<endl;look_hero2<<"龙神 "<<456<<endl;look_hero2<<"大娃 "<<354<<endl;look_hero2<<"小龙王 "<<346<<endl;look_hero2<<"小哪吒 "<<300<<endl;look_hero2<<"海中霸王 "<<264<<endl;look_hero2<<"小靓仔 "<<231<<endl;look_hero2<<"无敌火轮 "<<124<<endl;look_hero2<<"靓仔 "<<endl<<123<<endl; look_hero2.close();look_hero.open("heronum11.txt");}look_hero>>name[i]>>num_play[i]; } look_hero.close();}void playGame();//开始玩游戏; void look_player();//查看英雄榜void write_len();//记录当前游戏者的分数并写入英雄榜 void Set_name();//记录用户名字;
};
void Player::Set_name()
{cout<<"请输入新用户的名字";cin>>this->playname;
}
void Player::look_player()
{cout<<"~开始查看英雄榜"<<endl;cout<<" 名字 积分"<<endl;for(int i=0;i<10;i++){cout<<setw(10)<<name[i]<<" "<<num_play[i]<<endl; }
}
void Player::write_len()
{int k=10,q;//k 是 名次 //q 是 改 ID最高名次 int flag_name=0;for(int i=9;i>=0;i--){if(strcmp(this->playname,name[i])==0){flag_name=1;//如果 名字重复的 话 记录 q=i;//记录 位次 记录名字位次 }if(score>num_play[i])k=i;//记录分数位次 }if(flag_name==0&&k<=9){for(int i=k;i<9;i++){ strcpy(name[k+1],name[k]);//开始交换 num_play[k+1]=num_play[k];//开始交换 }strcpy(name[k],playname);//相应的名次交换过来 num_play[k]=score;}else if(flag_name==1&&num_play[q]>score);else if(flag_name==1&&num_play[q]<score){for(int i=q;q>k;q--){strcpy(name[i],name[i-1]);}strcpy(name[k],playname);}ofstream wpr("heronum10.txt");for(int i=0;i<10;i++){wpr<<name[i]<<" "<<num_play[i]<<endl;}wpr.close();
}
void Player::playGame()
{ system("cls");this->gotoxy(27,5);//初始化 cout<<"欢迎进入贪吃蛇系统~"<<endl;this->gotoxy(27,6);cout<<"请开始你的选择";this->gotoxy(27,7);cout<<"1.查看英雄榜";this->gotoxy(27,8);cout<<"2.选择游戏难度";this->gotoxy(27,9);cout<<"3.选择背景颜色";this->gotoxy(27,10);cout<<"4.开始游戏";this->gotoxy(27,11);cout<<"5.退出游戏";this->gotoxy(27,12);cout<<"6.创建新用户";this->gotoxy(27,13);cout<<"请开始选择:"; cin>>flag_G;if(flag_G==1){system("cls");this->look_player();cout<<"按任意键继续";getchar();getch(); this->playGame();}else if(flag_G==2){system("cls");this->Setnum(); cout<<"按任意键继续";getch();this->playGame();}else if(flag_G==3){system("cls");this->flagcolor();cout<<"按任意键继续";getch();this->playGame(); }else if(flag_G==4){system("cls");this->play();this->write_len(); //记录分数;this->gotoxy(13,13);cout<<"GAME OVER!";getch();getch();this->playGame();}else if(flag_G==5){system("cls");cout<<"游戏程序运行结束~~~~"; }else if(flag_G==6){system("cls");cout<<"请输入用户名:";cin>>playname;this->playGame(); }
}
int main()
{Player hero;int p1;cout<<"1.进入游戏并创建人物~~~";cout<<"2.离开页面~~";cin>>p1;if(p1==1){hero.Set_name();hero.playGame();}else{}return 0;
}
大一上学期大作业贪吃蛇相关推荐
- 大一上计算机大作业个人小结:游戏《妮可迷惑日常》,DirectX,WinAPI实战
前言 历时一个月,终于完成了人生中第一个游戏&计算机大作业<妮可迷惑日常>.首先自然是鸣谢一下两位合作大佬的帮助和包容. 关于游戏 这是一款基于DirectX中的DirectDra ...
- 关于对大一上学期的学习总结及大一下学期的规划。
1. 对大一上学期的学习总结 大学一学期很快就过去了,关于对大一上学期的学习总结,总的就二个方面:学习上,能够赶上老师的步伐,遇到不懂的问题也能虚心的向同学请教,这使我从一个技术小白很快的适应到自己的 ...
- 大一c语言大作业课题大全,昆明理工大学大一C语言大作业题目.doc
昆明理工大学大一C语言大作业题目 综合性实践排序求平均值(包括将数拆散求最大最小值).函数ReadDat()随机产生100个存放到数组aa中00个jsSort()函数的功能是:进行降序排列.最后调用函 ...
- 大一上学期C++课程设计——学生成绩管理系统(QT项目)
这里是一个大一的萌新!仅做学习分享 工程文件在评论区置顶!! 近期整理了一下大一上学期的课程设计报告作为学习总结,使用的软件是Qt Creator,主界面效果如下图 ----------以下为课程设计 ...
- 大一上学期学习生活情况总结
大一上学期学习生活情况总结 在本学期各科都已结课的某个夜里,我开始写我的这份总结.说实话,我真的很喜欢夜的这种安静--静能生慧. 我是高二下学期开始与计算机结缘,好吧,接触的比较晚啦.但这并不妨碍我对 ...
- 大一上学期C语言不熟知识点学习总结
大一上学期C语言不熟知识点学习总结通过前几章对顺序结构程序设计程序.if选择结构.switch语句.循环结构.数组.函数的学习,这一次我将主要针对几种不熟悉的知识点及题型进行分析. 一. 增1和减1运 ...
- 大一上学期Python学习心得体会
Python学习心得体会 经过了大一上学期的Python学习,我已经逐渐摸索到了Python的一些学习方法,学习Python,就像学习其他编程语言或者是学习一门外语一样 ,我们应该从Python的基础 ...
- unity期末作业-贪吃蛇 游戏有菜单界面有背景音乐
unity期末作业-贪吃蛇 游戏有菜单界面有背景音乐 游戏如下动态图: 点我下载 https://download.csdn.net/download/weixin_43474701/75853708
- 计算机英语大作业,英语学期大作业
学期大作业 全文提纲 这篇文章分五个部分,各部分标题分别为introduction, uation of the radiation integral, adaptive subdivision sc ...
最新文章
- 阿里云专家手把手教你重塑 IT 架构!
- 结对编程 黄金点游戏
- php 自动加载函数,PHP自动加载的实例详解
- Kafka学习笔记(3)----Kafka的数据复制(Replica)与Failover
- 上手测试GaussDB(for Redis) 和开源 Redis,只为推荐质优价廉的Redis
- VCSA 6.X(VMware vCenter Server Appliance)空间不足问题处理
- Helm 3 完整教程(九):Helm 函数讲解(3)类型转换函数、正则表达式函数
- 中国环境统计年鉴 1998-2021年
- thinkphp5基于php的校园微博系统--php-计算机毕业设计
- 申请一个微信小程序有哪些需要注意的事项
- Vue3 异步组件 suspense
- Android之手机号码格式的正则表达式
- 米的换算单位和公式_数学单位换算公式,1-6年级计算必备!
- grep检索关键字的命令_文件中查找关键字“ ”命令 grep
- 上海某大型企业因盗版Catia被罚千万
- 54家半导体芯片原厂涨价、调价及交期变动通知函!
- jquery 模拟点击事件
- 电路设计布线技巧十规则
- springboot整合redis之用户手机验证码注册登录
- 海外专利紧缺 中国IT企业国际化维艰
热门文章
- 关于 npm WARN checkPermissions Missing write access to 问题的解决办法
- openwrt 应用后台运行、开机自启动,一次安装永久启动
- java-php-python-ssm吉他库存管理计算机毕业设计
- 使用最大逆向匹配进行提槽
- 法国Pleiades高分卫星/遥感影像/卫星影像/高分二号影像
- 设置npm源地址(淘宝镜像地址)
- Java封装和封装的案例
- 3g android4 移植 飞思卡尔i.MX 6Quad Android 4.2.2的中兴和Ublox 3G驱动移植 Android——4.2 - 3G移植之路
- shell程序编程综合设计
- 路由器VPI/VCI DNS大全