本文共 11664 字,大约阅读时间需要 38 分钟。
MOVE__BOX部分:代码如下
#include<iostream>#include<Windows.h>#include <conio.h>using namespace std;void PutPlace(int x,int y);//设定输出位置void color(int a);//设定输出颜色//设定输出位置void PutPlace(int x, int y) { COORD Box;Box.X=x-1;Box.Y=y-1;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Box);}//设定输出颜色void color(int a){ SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), a);}class Move_Box{ int range[20][20];int Box_X;//箱子横坐标int Box_Y;//箱子纵坐标int Old_X;//记录上次box的坐标int Old_Y;
public:
Move_Box();//构造函数~Move_Box();//析构函数void Display();//显示游戏画面void Left();//向左移动void Right();//向右移动void Up();//向上移动void Down();//向下移动void Playgame();//开始游戏};Move_Box::Move_Box()//初始化参数{ for(int i=0;i<20;i++)//初始化20*20方格{ for(int j=0;j<20;j++){ range[i][j]=0;}}Box_X=10;Box_Y=10;range[Box_X][Box_Y]=1;}Move_Box::~Move_Box(){}//显示画面void Move_Box::Display(){ system("mode con cols=44 lines=25");//system("color 5f");PutPlace(1,1);color(4);for(int i=0;i<22;i++)cout<<"■";PutPlace(1,2);for(int i=0;i<20;i++){ cout<<"■";for(int j=0;j<20;j++){ switch(range[i][j]){ case 0:cout<<" ";break;case 1:color(10); cout<<"●"; break;}}color(4);cout<<"■"<<endl;}for(int i=0;i<22;i++){ cout<<"■";}color(4);}//向左移动void Move_Box::Left(){ //记录上次坐标并将range[][]记为0Old_X=Box_X;Old_Y=Box_Y;range[Old_X][Old_Y]=0;//Box_X=Box_X;Box_Y=Box_Y-1;range[Box_X][Box_Y]=1;//PutPlace(Box_X,Box_Y);cout<<"●";Display();}//向右移动void Move_Box::Right(){ //记录上次坐标并将range[][]记为0Old_X=Box_X;Old_Y=Box_Y;range[Old_X][Old_Y]=0;//Box_X=Box_X;Box_Y=Box_Y+1;range[Box_X][Box_Y]=1;Display();}//向上移动void Move_Box::Up(){ //记录上次坐标并将range[][]记为0Old_X=Box_X;Old_Y=Box_Y;range[Old_X][Old_Y]=0;//Box_X=Box_X-1;Box_Y=Box_Y;range[Box_X][Box_Y]=1;Display();}//向下移动void Move_Box::Down(){ //记录上次坐标并将range[][]记为0Old_X=Box_X;Old_Y=Box_Y;range[Old_X][Old_Y]=0;//Box_X=Box_X+1;Box_Y=Box_Y;range[Box_X][Box_Y]=1;Display();}//开始游戏void Move_Box::Playgame(){ char input;Display();LOGO:input=getch();//getch(input);switch(input){ case '4': Left();break;case '6': Right();break;case '8':Up();break;case '2':Down();break;}if(range[Box_X][Box_Y]!=0){ goto LOGO;}elsecout<<"GAME OVER";//cout<<Box_X<<" "<<Box_Y<<endl;}void main(){ Move_Box Melody;//Melody.Display();Melody.Playgame();system("pause");}
SNAKE部分:代码如下
#include <stdio.h> #include <windows.h> #include <time.h> #include <conio.h> #include <iostream>using namespace std;//-------------------------------------------------------------------
void GotoXY(int x, int y) //设定输出位置{ COORD color; color.X = x-1; color.Y = y-1; SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), color); } //-----------------------------------------------------------------void color(int a) //颜色函数{ SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);}struct HeroList{ char Name[10];int Highscore;}Hero[10];//----------------------------------------------------------void Save() //存储最高分及名字{ FILE *fp;if((fp=fopen("Hero_list","wb"))==NULL){cout<<"can not open file!"<<endl;return;}if(fwrite(&Hero[0],sizeof(struct HeroList),1,fp)!=1)cout<<"file write error!"<<endl;fclose(fp);}//**class CSnake{ int image[20][20]; //游戏面板,即小蛇活动范围int FoodX; //事物出现的X坐标int FoodY; //事物出现的Y坐标int snakeX; //记录小蛇的头部X坐标int snakeY; //记录小蛇的头部Y坐标int head; //小蛇头部下标int tail; //小蛇尾部下标int snake[2][2000]; //记录小蛇所有身体的坐标int node; //小蛇的节数int direction; //小蛇头部的方向 int i,j; int gamespeed; //速度int score; //记录分数char arrowKey; //接受按键的变量int GameOver; //使游戏结束的变量int level; //设置等级int length; //为了设置等级而与node一样记录设的长度public:CSnake() //构造函数初始化部分变量{ head=3; //初始化头部下标 tail=0; //初始化尾部下标 node=4; //小蛇初始节数为4节 gamespeed=300; //游戏速度(移动的间隔时间) score=0; //初始化分数为0 direction=6; //小蛇的初始方向向右 GameOver=0; //进入游戏初始化为0 level=1; length=4;}~CSnake() //析构函数{} void Init(); //初始化游戏面板及小蛇的坐标int DrawSnake(); //记录小蛇每次移动后头部及身体的下一坐标void Automove(); //使小蛇自动移动int Gameover(); //判断游戏是否结束int Generatefood(); //产生食物void display(); //显示游戏面板void shiftLeft(); //控制左移void shiftRight(); //控制右移void shiftDown(); //控制下移void shiftUp(); //控制上移int PlayGame(); //执行游戏的函数void Setspeed(); //设置速度int Pause(); //游戏的暂停
};
//-------------------------------------- -------------------------------void CSnake::Init() //初始化部分数据{for(i=0;i<20;i++) //初始化游戏面板
for(j=0;j<20;j++) image[i][j]=0;for(i=0;i<4;i++) //初始化小蛇初始位置{ snake[0][i]=1;snake[1][i]=i+1;}for(i=1;i<=3;i++) //初始化小蛇坐标的显示值(即初始化小蛇显示图形对应的值)image[1][i]=3; image[1][4]=1;}//---------------------------------------------------------------int CSnake::Gameover() //判断游戏是否结束{ if(snakeX<0 || snakeX>19 ||snakeY<0 || snakeY>19) // 碰到墙壁游戏结束{ GotoXY(1,25); cout << "Game over!" << endl;GameOver=1;return GameOver;}if((image[snakeX][snakeY]!=0)&&!(snakeX==FoodX&&snakeY==FoodY)) //蛇头碰到蛇身游戏结束{ GotoXY(1,25); cout << "Game over!" << endl;GameOver=1;return GameOver;}return 0;}//----------------------------------------------------------------int CSnake::DrawSnake(){ if(snakeX==FoodX && snakeY==FoodY) //若小蛇头部坐标与食物坐标重叠则吃掉食物{ node++; // 小蛇节数增一score+=10; //分数增加 length++;if(length>=8) //当小蛇增长到8个时,等级加一{length-=8;level++;}image[snakeX][snakeY]=1; //小蛇头部移动的下一位置头部图像对应的值赋给图像image[snake[0][head]][snake[1][head]] = 3; //小蛇头部其后紧跟的身体一格移动的下一位置头部图像对应的值赋给图像head=(head+1)%10000;snake[0][head] = snakeX; //将小蛇头部此时的坐标值赋给记录头部坐标的snake[0][head]snake[1][head] = snakeY;Generatefood(); //吃掉食物后再次随机分布食物display(); //刷新显示} else { //没有吃食物 image[snake[0][tail]][snake[1][tail]]=0; //擦去小蛇尾部 tail=(tail+1)%10000; image[snake[0][head]][snake[1][head]]=3; //小蛇头部其后紧跟的身体一格移动的下一位置头部图像对应的值赋给图像 head=(head+1)%10000; snake[0][head]=snakeX; //将小蛇头部此时的坐标值赋给记录头部坐标的snake[0][head] snake[1][head]=snakeY; image[snake[0][head]][snake[1][head]]=1; //小蛇头部移动的下一位置头部图像对应的值赋给图像 display(); }
return 0;
}//-----------------------------------------------------------void CSnake::shiftLeft() //左移则小蛇蛇头方向向左{ direction=4; }//++++++++++++++++++++++++++void CSnake::shiftRight() //右移则小蛇蛇头方向向右{ direction=6; }//+++++++++++++++++++++++++++void CSnake::shiftUp() //上移则小蛇蛇头方向向上{ direction=8; } //+++++++++++++++++++++++++++void CSnake::shiftDown() //下移则小蛇蛇头方向向下{ direction=2; }//------------------------------------------------------void CSnake::Automove(){ switch(direction){ case 6:snakeX= snake[0][head]; snakeY= snake[1][head]+1;break; //接收到向右的信息小蛇头部Y坐标加一,X坐标不变并赋给记录头部坐标的变量case 4:snakeX= snake[0][head]; snakeY= snake[1][head]-1;break; //接收到向左的信息小蛇头部Y坐标减一,X坐标不变并赋给记录头部坐标的变量case 8:snakeX= snake[0][head]-1; snakeY= snake[1][head];break; //接收到向上的信息小蛇头部X坐标加一,Y坐标不变并赋给记录头部坐标的变量case 2:snakeX= snake[0][head]+1; snakeY= snake[1][head];break; //接收到向下的信息小蛇头部X坐标加一,Y坐标不变并赋给记录头部坐标的变量default:;}}//--------------------------------------------------------------------- int CSnake::Generatefood() // 产生食物{ srand(time(0)); //以时间为种子生成随机序列do{ FoodX=rand()%20; //食物输出的X坐标FoodY=rand()%20; //食物输出的Y坐标}while(image[FoodX][FoodY]!=0); //产生的食物坐标限定在游戏面板内,且食物坐标不与小蛇身体坐标重合image[FoodX][FoodY]=2;return image[FoodX][FoodY];}//----------------------------------------------------------------void CSnake::display() // 显示游戏面板(包括围墙、食物及小蛇){ color(10);GotoXY(1,1);for(i=0;i<22;i++) printf("■"); GotoXY(1,2); for(i=0;i<20;i++) { color(10);printf("■"); for(j=0;j<20;j++) { switch(image[i][j]) { case 0:color(15);printf(" ");break; case 1:color(11);printf("●");break;case 2:color(12);printf("●");break; case 3:color(13);printf("●");break;}} color(10);printf("■\n");} color(10);for(i=0;i<22;i++) printf("■"); color(13);GotoXY(46,9); printf("SCORE:%d",score); //记录分数GotoXY(46,10); printf("LEVEL=%d",level); //记录等级}//----------------------------------------------------void CSnake::Setspeed() //设置小蛇移动的速度{ int Esc=0; while(!Esc){ int speed;color(12);cout<<"1.Very Slow 2.Slow 3.Normal 4.Fast 5.Very Fast "<<endl;cout<<"请输入您的选择:";cin>>speed;switch(speed){ case 0:Esc=1;gamespeed=300;break;case 1:gamespeed=300;Esc=1;break;case 2:gamespeed=200;Esc=1;break;case 3:gamespeed=80;Esc=1;break;case 4:gamespeed=30;Esc=1;break;case 5:gamespeed=12;Esc=1;break;}}}//-----------------------------------------------------------int CSnake::Pause() //暂停功能{ char c; // GotoXY(1,25);printf("Pause! "); do {c=getch();} while(c!='p'); arrowKey=0;return arrowKey;} //-------------------------------------------- //**int CSnake::PlayGame() //执行游戏函数{ Init(); //初始化数据Generatefood(); //产生食物display(); //显示游戏面板while (!GameOver) { if(kbhit()) //接受按键{ arrowKey = getch();} if(direction==2||direction==8) //当小蛇的头部移动方向为上下时,左右键才起作用{ switch(arrowKey){ case'6':shiftRight();break;case'4':shiftLeft();break; case'e':exit(1);break;case'p':Pause();break;default:break;} }else if(direction==4||direction==6) //当小蛇的头部移动方向为左右时,上下键才起作用{ switch(arrowKey) { case'8':shiftUp();break;case'5':shiftDown();break; case'e':exit(1);break; case'p':Pause();break;default:break;} } Sleep(gamespeed); //小蛇移动一格的速度Automove(); // 校舍自动移动Gameover(); //判断游戏是否结束if(GameOver==1) //若游戏结束,则直接跳出循环break;DrawSnake(); //判断是否吃食物display(); //显示游戏面板}Hero[0].Highscore=score;getch();return 0;}//**void Welcome(void) //欢迎界面{ printf(" \n");color(13);printf("$//----------------------------------------------
void main() //主函数{ CSnake SNAKE;char Name[10]=" ";// int Highscore=0;char ch;char Get=0;// int i;Welcome();while(1){ color(14); // 主界面cout<<" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ "<<endl;cout<<" ----- - - - - - - ---- "<<endl;cout<<" $ ▁▁▁▁▁▁▁▁▁▁▁▁▁▁ $ "<<endl;cout<<" $ ▏ ▏ $ "<<endl;cout<<" $ ▏ 1.开始游戏 ▏ $ "<<endl;cout<<" $ ▏ 2.设置速度 ▏ $ "<<endl;cout<<" $ ▏ 3.使用说明 ▏ $ "<<endl;cout<<" $ ▏ 4.英雄榜 ▏ $ "<<endl;cout<<" $ ▏ 5.退出 ▏ $ "<<endl;cout<<" $ ▏ ▏ $ "<<endl;cout<<" $ ▔▔▔▔▔▔▔▔▔▔▔▔▔▔ $ "<<endl;cout<<" ----- - - - - - - ---- "<<endl;cout<<" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ "<<endl;cin>>ch;if(ch=='1') { system("cls"); SNAKE.PlayGame(); system("cls"); if(Hero[0].Highscore<100) {cout<<"您还需努力哟!"<< Hero[0].Highscore&&Hero[0].Highscore>200) {cout<<"您一定是高手!"< < Hero[0].Highscore&&Hero[0].Highscore>400) { cout<<"您实在太厉害了!"< < 200) { cout<<"请输入您的大名:"; cin>>Hero[0].Name; Save(); } system("pause"); system("cls"); break; } else if(ch=='2') { system("cls"); SNAKE.Setspeed(); system("pause"); system("cls"); continue; } else if(ch=='3') //详细使用说明 { system("cls"); cout<<" "<
}
转载于:https://blog.51cto.com/13665347/2104199