#include <iostream>#include<fstream>#include <ctime>#include <cmath>#include <stdlib.h>#include<stdio.h> //时间 //文件#include <string>#define random(x)(rand()%x)using namespace std;void thunder(int Dif,int Row,int Column,char *USer){ int r,c,alls[22][22],backstage[22][22]={0}; srand((int)time(0)); for(r=1;r<=Row;r++) // 生成alls(0~1)1是雷 { for(c=1;c<=Column;c++) { if(random(6)<1) {alls[r][c]=1;} else{alls[r][c]=0;}; } }; for(r=0;r<=Row+1;r++) //生成 backstage(正确答案) { for(int c=0;c<=Column+1;c++) { if(alls[r][c]==1) { (int)backstage[r][c]='*'; //将1变为 * 代表雷 } else { for(int i=r-1;i<=r+1;i++) //将0变为数字 (代表周围雷数) for(int j=c-1;j<=c+1;j++) { if(alls[i][j]!=alls[r][c]&&alls[i][j]==1){backstage[r][c]++;}; } }; //else 结束 }; // for 结束 }; // for 结束 cout<<"======================*********================================"<<endl; char surface[22][22]; //生成surface(用户界面) for(r=0;r<22;r++) //全部为零 for(c=0;c<22;c++) { surface[r][c]='0'; } for(r=1;r<=Row;r++) //中间化 # 形成0包围#的形式 (通过数 #-->(*||数字) 的个数 赢的时候停止循环) for(c=1;c<=Column;c++) { surface[r][c]='#'; } for(r=1;r<=Row;r++) //输出 surface 界面 便于检查 { for(c=1;c<=Column;c++) {cout<<" "<<surface[r][c];}; cout<<endl; }; cout<<"请按格式输入"<<endl <<"前两个数字为坐标,最后一个数字“1”表示此位置为雷,“0”则表示不是。"<<endl <<"如:1 3 1 表示一行三列是雷;2 4 0 表示二行四列不是雷"<<endl <<"提示:当数字周围雷都被扫出时,可再次按要求输入此位置,可得到周围数字。"<<endl; long i=10000000L; //计算时间开始 clock_t start,finish; double duration; start=clock(); while(i--); //计算时间开始 int num=Row*Column; //计算#号个数 while(num!=0) //控制 是否点完所有位置 { int x,y,judge; cin>>x>>y>>judge; if(alls[x][y]!=judge) { cout<<"you lose!!!"<<endl; cout<<"The answer is:"<<endl; for(r=1;r<=Row;r++) //输了 输出backstage 显示正确答案 { for(int c=1;c<=Column;c++) { cout<<" "<<(char)(backstage[r][c]==42?backstage[r][c]:backstage[r][c]+'0'); //输出backstage } cout<<endl; } break; } else { if(alls[x][y]==1) {if(surface[x][y]=='#'){num--;}surface[x][y]='@'; } // 雷 判断正确 显示“@”;数“#” else { if(backstage[x][y]!=0) // 数字 判断正确 显示数字 { if(surface[x][y]=='#'){num--; surface[x][y]=backstage[x][y]+'0'; } // 数“#” else { int lei_num=0; for(int i=x-1;i<=x+1;i++) //数 数字周围 雷的个数 for(int j=y-1;j<=y+1;j++) { if(surface[i][j]=='@') lei_num++; } if(backstage[x][y]==lei_num) // 看数字周围雷是否全部扫出 提示 显示数字周围 { for(int i=x-1;i<=x+1;i++) for(int j=y-1;j<=y+1;j++) if(surface[i][j]=='#') //数“#” { surface[i][j]=backstage[i][j]+'0'; num--; } } } } else // 数字为零时 显示零周围的零 { if(surface[x][y]=='#'){num--;}; //数“#” surface[x][y]=backstage[x][y]+'0'; for(int i=x-1;i<=x+1;i++) // 显示零周围的数字 for(int j=y-1;j<=y+1;j++) if(surface[i][j]=='#') // 避免 死循环 { surface[i][j]=backstage[i][j]+'0'; num--; //数“#” } for(int k=0;k<20;k++) //最多20层零 (点出最边上的零) { for (int R=1;R<=Row;R++) //检查所有零 for(int C=1;C<=Column;C++) //再次显示零周围的数字 { if(surface[R][C]=='0') { for(int i=R-1;i<=R+1;i++) for(int j=C-1;j<=C+1;j++) { if(surface[i][j]=='#') // 避免 死循环 数“#” { surface[i][j]=backstage[i][j]+'0'; num--; } } } } //匹配for 内 } //匹配 for 外 }//匹配else }//匹配else }//匹配els cout<<endl; cout<<"======================*********================================"<<endl; for(r=1;r<=Row;r++) //输出界面(已修改) { for(c=1;c<=Column;c++) {cout<<" "<<surface[r][c];}; cout<<endl; }; } //匹配while finish=clock(); //计算时间结束 duration=(double)(finish-start)/CLOCKS_PER_SEC; //时间变量 if(num==0) //所有 { cout<<" You win! Congratulations!! "<<endl; cout<<" Your time is: "<<duration<<endl; if(Dif==1) //读取 简单扫雷 的存储文件 { string Name; string name[6]; double Time,rang; double times[6]; int i=0; ifstream inf("扫雷 简单.txt"); for(i=0;i<5;i++) //文件中信息导入到数组里 { inf>>Name;inf>>rang>>Time; name[i]=Name; times[i]=Time; } inf.close(); name[5]=USer; //本轮玩家信息 times[5]=duration; double t1=0; string t2; for(int j=0;j<5;j++) //冒泡排序法 { for(i=0;i<5-j;i++) { if(times[i]>times[i+1]) { t1=times[i]; times[i]=times[i+1]; times[i+1]=t1; t2=name[i]; name[i]=name[i+1]; name[i+1]=t2; } } } ofstream outf("扫雷 简单.txt"); for(i=0;i<5;i++) //将前五名玩家信息存储到文件中 { cout<<name[i]<<" "<<i+1<<" "<<times[i]<<endl; outf<<name[i]<<" "<<i+1<<" "<<times[i]<<endl; } outf.close(); } if(Dif==2) //读取 一般扫雷 的存储文件 { string Name; string name[6]; double Time,rang; double times[6]; int i=0; ifstream inf("扫雷 一般.txt"); for(i=0;i<5;i++) //文件中信息导入到数组里 { inf>>Name;inf>>rang>>Time; name[i]=Name; times[i]=Time; } inf.close(); name[5]=USer; //本轮玩家信息 times[5]=duration; double t1=0; string t2; for(int j=0;j<5;j++) //冒泡排序法 { for(i=0;i<5-j;i++) { if(times[i]>times[i+1]) { t1=times[i]; times[i]=times[i+1]; times[i+1]=t1; t2=name[i]; name[i]=name[i+1]; name[i+1]=t2; } } } ofstream outf("扫雷 一般.txt"); for(i=0;i<5;i++) //将前五名玩家信息存储到文件中 并输出 { cout<<name[i]<<" "<<i+1<<" "<<times[i]<<endl; outf<<name[i]<<" "<<i+1<<" "<<times[i]<<endl; } outf.close(); } if(Dif==3) //读取 困难扫雷 的存储文件 { string Name; string name[6]; double Time,rang; double times[6]; int i=0; ifstream inf("扫雷 困难.txt"); for(i=0;i<5;i++) //文件中信息导入到数组里 { inf>>Name;inf>>rang>>Time; name[i]=Name; times[i]=Time; } inf.close(); name[5]=USer; //本轮玩家信息 times[5]=duration; double t1=0; string t2; for(int j=0;j<5;j++) //冒泡排序法 { for(i=0;i<5-j;i++) { if(times[i]>times[i+1]) { t1=times[i]; times[i]=times[i+1]; times[i+1]=t1; t2=name[i]; name[i]=name[i+1]; name[i+1]=t2; } } } ofstream outf("扫雷 困难.txt"); for(i=0;i<5;i++) //将前五名玩家信息存储到文件中 { cout<<name[i]<<" "<<i+1<<" "<<times[i]<<endl; outf<<name[i]<<" "<<i+1<<" "<<times[i]<<endl; } outf.close(); } }}void scale(int dif,char *User) //选择难度{ int row,column; if(dif==1) {row=3;column=3;} if(dif==2) {row=7;column=7;} if(dif==3) {row=10;column=10;} cout<<"The scale is: "<<row<<"*"<<column<<endl; thunder(dif,row,column,User);};int main(){ int Continue=1; int difficulty; char user[10]; cout<<" Welcom to the game! "<<endl <<" 请输入用户名! "<<endl; cin>>user; while(Continue==1) { cout<<"=======================*******************======================="<<endl <<" 请选择难度! "<<endl <<" 简单——1 "<<endl <<" 一般——2 "<<endl <<" 困难——3 "<<endl; cin>>difficulty; scale(difficulty,user); cout<<"继续游戏——1 结束游戏——0"<<endl; cin>>Continue; } return 0;}扫雷小游戏,自己编的代码
要源码的,在评论里打个@,我先去做要源码的,在评论里打个@,我先去做要源码的,在评论里打个@,我先去做要源码的,在评论里打个@,我先去做要源码的,在评论里打个@,我先去做要源码的,在评论里打个@,我先去做要源码的,在评论里打个@,我先去做要源码的,在评论里打个@,我先去做要源码的,在评论里打个@,我先去做要源码的,在评论里打个@,我先去做要源码的,在评论里打个@,我先去做要源码的,在评论里打个@,我先去做要源码的,在评论里打个@,我先去做要源码的,在评论里打个@,我先去做要源码的,在评论里打个@,我先去做要源码的,在评论里打个@,我先去做要源码的,在评论里打个@,我先去做#include#include#include#include#includeusing namespace std;ypedef struct Frame{ COORD position[2]; int flag;}Frame;void SetPos(COORD a)// set cursor { HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(out, a);} void SetPos(int i, int j)// set cursor{ COORD pos={i, j}; SetPos(pos);} void HideCursor(){ CONSOLE_CURSOR_INFO cursor_info = {1, 0}; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);} //把第y行,[x1, x2) 之间的坐标填充为 chvoid drawRow(int y, int x1, int x2, char ch){ SetPos(x1,y); for(int i = 0; i <= (x2-x1); i++) cout<<ch;} //在a, b 纵坐标相同的前提下,把坐标 [a, b] 之间填充为 chvoid drawRow(COORD a, COORD b, char ch){ if(a.Y == b.Y) drawRow(a.Y, a.X, b.X, ch); else { SetPos(0, 25); cout<<"error code 01:无法填充行,因为两个坐标的纵坐标(x)不相等"; system("pause"); }} //把第x列,[y1, y2] 之间的坐标填充为 chvoid drawCol(int x, int y1, int y2, char ch){ int y=y1; while(y!=y2+1) { SetPos(x, y); cout<<ch; y++; }} //在a, b 横坐标相同的前提下,把坐标 [a, b] 之间填充为 chvoid drawCol(COORD a, COORD b, char ch){ if(a.X == b.X) drawCol(a.X, a.Y, b.Y, ch); else { SetPos(0, 25); cout<<"error code 02:无法填充列,因为两个坐标的横坐标(y)不相等"; system("pause"); }}void drawFrame(COORD a, COORD b, char row, char col){ drawRow(a.Y, a.X+1, b.X-1, row); drawRow(b.Y, a.X+1, b.X-1, row); drawCol(a.X, a.Y+1, b.Y-1, col); drawCol(b.X, a.Y+1, b.Y-1, col);} void drawFrame(int x1, int y1, int x2, int y2, char row, char col){ COORD a={x1, y1}; COORD b={x2, y2}; drawFrame(a, b, row, col);}void drawFrame(Frame frame, char row, char col){ COORD a = frame.position[0]; COORD b = frame.position[1]; drawFrame(a, b, row, col);}void drawPlaying(){ drawFrame(0, 0, 48, 24, '=', '|');// draw map frame; drawFrame(49, 0, 79, 4, '-', '|');// draw output frame drawFrame(49, 4, 79, 9, '-', '|');// draw score frame drawFrame(49, 9, 79, 20, '-', '|');// draw operate frame drawFrame(49, 20, 79, 24, '-', '|');// draw other message frame SetPos(52, 6); cout<<"得分:"; SetPos(52, 7); cout<<"称号:"; SetPos(52,10); cout<<"操作方式:"; SetPos(52,12); cout<<" a,s,d,w 控制战机移动。"; SetPos(52,14); cout<<" p 暂停游戏。"; SetPos(52,16); cout<<" e 退出游戏。";}int random(int a, int b){ int c=(rand() % (a-b))+ a; return c;}COORD random(COORD a, COORD b){ int x=random(a.X, b.X); int y=random(a.Y, b.Y); COORD c={x, y}; return c;} bool judgeCoordInFrame(Frame frame, COORD spot){ if(spot.X>=frame.position[0].X) if(spot.X<=frame.position[1].X) if(spot.Y>=frame.position[0].Y) if(spot.Y<=frame.position[0].Y) return true; return false;} void printCoord(COORD a){ cout <<"( "<<a.X<<" , "<<a.Y<<" )";} void printFrameCoord(Frame a){ printCoord(a.position[0]); cout <<" - "; printCoord(a.position[1]);} int drawMenu(){ SetPos(30, 1); cout<<"P l a n e W a r"; drawRow(3, 0, 79, '-'); drawRow(5, 0, 79, '-'); SetPos(28, 4); cout<<"w 和 s 选择, k 确定"; SetPos(15, 11); cout<<"1. 简单的敌人"; SetPos(15, 13); cout<<"2. 冷酷的敌人"; drawRow(20, 0, 79, '-'); drawRow(22, 0, 79, '-'); SetPos(47, 11); cout<<"简单的敌人:"; SetPos(51, 13); cout<<"简单敌人有着较慢的移动速度。"; SetPos(24, 21); cout<<"制作:老八(秘制小汉堡)"; int j=11; SetPos(12, j); cout<>"; //drawFrame(45, 9, 79, 17, '=', '|'); while(1) { if( _kbhit() ) { char x=_getch(); switch (x) { case 'w' : { if( j == 13) { SetPos(12, j); cout<<" "; j = 11; SetPos(12, j); cout<>"; SetPos(51, 13); cout<<" "; SetPos(47, 11); cout<<"简单的敌人:"; SetPos(51, 13); cout<<"简单敌人有着较慢的移动速度,比较容易对付"; } break; } case 's' : { if( j == 11 ) { SetPos(12, j); cout<<" "; j = 13; SetPos(12, j); cout<>"; SetPos(51, 13); cout<<" "; SetPos(47, 11); cout<<"冷酷的敌人:"; SetPos(51, 13); cout<<"冷酷的敌人移动速度较快,难对付哟。"; } break; } case 'k' : { if (j == 8) return 1; else return 2; } } } }}DWORD WINAPI MusicFun(LPVOID lpParamte){ //DWORD OBJ; sndPlaySound(TEXT("bgm.wav"), SND_FILENAME|SND_ASYNC); return 0;}class Game{public: COORD position[10]; COORD bullet[10]; Frame enemy[8]; int score; int rank; int rankf; string title; int flag_rank; Game (); //初始化所有 void initPlane(); void initBullet(); void initEnemy(); //初始化其中一个 //void initThisBullet( COORD ); //void initThisEnemy( Frame ); void planeMove(char); void bulletMove(); void enemyMove(); //填充所有 void drawPlane(); void drawPlaneToNull(); void drawBullet(); void drawBulletToNull(); void drawEnemy(); void drawEnemyToNull(); //填充其中一个 void drawThisBulletToNull( COORD ); void drawThisEnemyToNull( Frame ); void Pause(); void Playing(); void judgePlane(); void judgeEnemy(); void Shoot(); void GameOver(); void printScore();}; Game::Game(){ initPlane(); initBullet(); initEnemy(); score = 0; rank = 25; rankf = 0; flag_rank = 0;} void Game::initPlane(){ COORD centren={39, 22}; position[0].X=position[5].X=position[7].X=position[9].X=centren.X; position[1].X=centren.X-2; position[2].X=position[6].X=centren.X-1; position[3].X=position[8].X=centren.X+1; position[4].X=centren.X+2; for(int i=0; i<=4; i++) position[i].Y=centren.Y; for(int i=6; i<=8; i++) position[i].Y=centren.Y+1; position[5].Y=centren.Y-1; position[9].Y=centren.Y-2;} void Game::drawPlane(){ for(int i=0; i<9; i++) { SetPos(position[i]); if(i!=5) cout<<"O"; else if(i==5) cout<<"|"; }} void Game::drawPlaneToNull(){ for(int i=0; i<9; i++) { SetPos(position[i]); cout<<" "; } } void Game::initBullet(){ for(int i=0; i<10; i++) bullet[i].Y = 30;} void Game::drawBullet(){ for(int i=0; i<10; i++) { if( bullet[i].Y != 30) { SetPos(bullet[i]); cout<<"^"; } }} void Game::drawBulletToNull(){ for(int i=0; i<10; i++) if( bullet[i].Y != 30 ) { COORD pos={bullet[i].X, bullet[i].Y+1}; SetPos(pos); cout<<" "; } } void Game::initEnemy(){ COORD a={1, 1}; COORD b={45, 15}; for(int i=0; i<8; i++) { enemy[i].position[0] = random(a, b); enemy[i].position[1].X = enemy[i].position[0].X + 3; enemy[i].position[1].Y = enemy[i].position[0].Y + 2; }} void Game::drawEnemy(){ for(int i=0; i<8; i++) drawFrame(enemy[i].position[0], enemy[i].position[1], '-', '|');} void Game::drawEnemyToNull(){ for(int i=0; i<8; i++) { drawFrame(enemy[i].position[0], enemy[i].position[1], ' ', ' '); } } void Game::Pause(){ SetPos(61,2); cout<<" "; SetPos(61,2); cout<<"暂停中..."; char c=_getch(); while(c!='p') c=_getch(); SetPos(61,2); cout<<" ";} void Game::planeMove(char x){ if(x == 'a') if(position[1].X != 1) for(int i=0; i<=9; i++) position[i].X -= 2; if(x == 's') if(position[7].Y != 23) for(int i=0; i<=9; i++) position[i].Y += 1; if(x == 'd') if(position[4].X != 47) for(int i=0; i<=9; i++) position[i].X += 2; if(x == 'w') if(position[5].Y != 3) for(int i=0; i<=9; i++) position[i].Y -= 1;} void Game::bulletMove(){ for(int i=0; i<10; i++) { if( bullet[i].Y != 30) { bullet[i].Y -= 1; if( bullet[i].Y == 1 ) { COORD pos={bullet[i].X, bullet[i].Y+1}; drawThisBulletToNull( pos ); bullet[i].Y=30; } } }} void Game::enemyMove(){ for(int i=0; i<8; i++) { for(int j=0; j<2; j++) enemy[i].position[j].Y++; if(24 == enemy[i].position[1].Y) { COORD a={1, 1}; COORD b={45, 3}; enemy[i].position[0] = random(a, b); enemy[i].position[1].X = enemy[i].position[0].X + 3; enemy[i].position[1].Y = enemy[i].position[0].Y + 2; } }} void Game::judgePlane(){ for(int i = 0; i < 8; i++) for(int j=0; j<9; j++) if(judgeCoordInFrame(enemy[i], position[j])) { SetPos(62, 1); cout<<"坠毁"; drawFrame(enemy[i], '+', '+'); Sleep(1000); GameOver(); break; }} void Game::drawThisBulletToNull( COORD c){ SetPos(c); cout<<" ";} void Game::drawThisEnemyToNull( Frame f ){ drawFrame(f, ' ', ' ');} void Game::judgeEnemy(){ for(int i = 0; i < 8; i++) for(int j = 0; j < 10; j++) if( judgeCoordInFrame(enemy[i], bullet[j]) ) { score += 5; drawThisEnemyToNull( enemy[i] ); COORD a={1, 1}; COORD b={45, 3}; enemy[i].position[0] = random(a, b); enemy[i].position[1].X = enemy[i].position[0].X + 3; enemy[i].position[1].Y = enemy[i].position[0].Y + 2; drawThisBulletToNull( bullet[j] ); bullet[j].Y = 30; }} void Game::Shoot(){ for(int i=0; i<10; i++) if(bullet[i].Y == 30) { bullet[i].X = position[5].X; bullet[i].Y = position[5].Y-1; break; }} void Game::printScore(){ if(score == 120 && flag_rank == 0) { rank -= 3; flag_rank = 1; } else if( score == 360 && flag_rank == 1) { rank -= 5; flag_rank = 2; } else if( score == 480 && flag_rank == 2) { rank -= 5; flag_rank = 3; } int x=rank/5; SetPos(60, 6); cout<<score; if( rank!=rankf ) { SetPos(60, 7); if( x == 5) title="初级飞行员"; else if( x == 4) title="中级飞行员"; else if( x == 3) title="高级飞行员"; else if( x == 2 ) title="王牌飞行员"; cout<<title; } rankf = rank;} void Game::Playing(){ //HANDLE MFUN; //MFUN= CreateThread(NULL, 0, MusicFun, NULL, 0, NULL); drawEnemy(); drawPlane(); int flag_bullet = 0; int flag_enemy = 0; while(1) { Sleep(8); if(_kbhit()) { char x = _getch(); if ('a' == x || 's' == x || 'd' == x || 'w' == x) { drawPlaneToNull(); planeMove(x); drawPlane(); judgePlane(); } else if ('p' == x) Pause(); else if( 'k' == x) Shoot(); else if( 'e' == x) { //CloseHandle(MFUN); GameOver(); break; } } /* 处理子弹 */ if( 0 == flag_bullet ) { bulletMove(); drawBulletToNull(); drawBullet(); judgeEnemy(); } flag_bullet++; if( 5 == flag_bullet ) flag_bullet = 0; /* 处理敌人 */ if( 0 == flag_enemy ) { drawEnemyToNull(); enemyMove(); drawEnemy(); judgePlane(); } flag_enemy++; if( flag_enemy >= rank ) flag_enemy = 0; /* 输出得分 */ printScore(); }} void Game::GameOver(){ system("cls"); COORD p1={28,9}; COORD p2={53,15}; drawFrame(p1, p2, '=', '|'); SetPos(36,12); string str="Game Over!"; for(int i=0; i<str.size(); i++) { Sleep(80); cout<<str[i]; } Sleep(1000); system("cls"); drawFrame(p1, p2, '=', '|'); SetPos(31, 11); cout<<"击落敌机:"<<score/5<<" 架"; SetPos(31, 12); cout<<"得 分:"<<score; SetPos(31, 13); cout<<"获得称号:"<<title; SetPos(30, 16); Sleep(1000); cout<<"继续? 是(y)| 否(n)制作:老八";as: char x=_getch(); if (x == 'n') exit(0); else if (x == 'y') { system("cls"); Game game; int a = drawMenu(); if(a == 2) game.rank = 20; system("cls"); drawPlaying(); game.Playing(); } else goto as;}int main(){ srand((int)time(0)); HideCursor(); Game game; int a = drawMenu(); if(a == 2) game.rank = 20; system("cls"); drawPlaying(); game.Playing();}
#include <stdio.h>#include <stdlib.h>#include <time.h>#include <conio.h>#include <windows.h>#define W 32#define H 22const int SIZE_SK = 30*20;HANDLE hOut;COORD pos= {0, 0};CONSOLE_CURSOR_INFO cur_info = {1, 0};struct snake {short x, y; //节点坐标short md; //节点运动方向short num; //节点内容int col; //节点颜色} snake[30*20];const short dx[4] = {-1, 1, 0, 0}; //方向const short dy[4] = {0, 0, -1, 1}; //方向short gamemap[W][H];short head, tail, score=0;void initmap(int tm);void createFood(void);int getkeys(void);int move(int idx);void pntSnake(int i);void drawEdge(void);void gameinfo(char *s, int n);int main(void){int tm = 150; //刷新间隔150毫秒hOut = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorInfo(hOut, &cur_info); //隐藏光标system("COLOR 2f");initmap(tm);return 0;}void initmap(int tm){short x, y, i, j;int index, tmp, ret_m;while (1){head=0;tail=-1;score=0;//初始化蛇节点随机颜色srand(time(0));for (i=0; i<SIZE_SK; i++)snake[i].col = rand()%8+8 | 0x20;//初始化地图数组for (i=0; i<W; i++)for (j=0; j<H; j++)gamemap[i][j] = 0;system("cls");//绘制边界drawEdge();//打印蛇头srand(time(0));do {x = rand()%(W-2) + 1;y = rand()%(H-2) + 1;} while (gamemap[x][y] != 0); //只在空白处生成snake[head].x = x;snake[head].y = y;gamemap[x][y] = snake[head].num = 1;pos.X = x*2;pos.Y = y;SetConsoleCursorPosition(hOut, pos);printf("█");//打印食物createFood();while ((index=getkeys()) == 4)Sleep(500);//循环开始while (1){ret_m = move(index);if (ret_m == 1){pos.X = 0; pos.Y = H;SetConsoleCursorPosition(hOut, pos);printf("哎呀,挂了哦 ^_^");break;}else if (ret_m == 2){pos.X = 0; pos.Y = H;SetConsoleCursorPosition(hOut, pos);printf("哎呀,超神了 ^_^");break;}Sleep(tm);if ((tmp = getkeys()) != 4)index = tmp;}//菜单代码puts(" 按w\\s\\a\\d 继续玩,退出请关闭我");getch();}}void createFood(void){short x, y;srand(time(0));do {x = rand()%(W-2) + 1;y = rand()%(H-2) + 1;} while (gamemap[x][y] != 0);gamemap[x][y] = 2;pos.X = x*2; pos.Y = y;SetConsoleCursorPosition(hOut, pos);SetConsoleTextAttribute(hOut, 0x2f);printf("⊙");}int getkeys(void) //获取方向键{char ch;while(kbhit()){ch = getch();if(ch == 'w')return 2;if(ch == 's')return 3;if(ch == 'a')return 0;if(ch == 'd')return 1;while (kbhit());}return 4;}int move(int idx){int newx, newy, pt_tail, i;newx = snake[head].x + dx[idx];newy = snake[head].y + dy[idx];switch (gamemap[newx][newy]){case 0:if ((head = ++head%SIZE_SK) != tail){ //不相等即蛇节点队列未满snake[head].x = newx;snake[head].y = newy;snake[head].num = 1;gamemap[newx][newy] = 1;tail = ++tail%SIZE_SK;snake[tail].num = 0; //清除尾部,打印空字符gamemap[snake[tail].x][snake[tail].y] = 0;snake[head].md = idx; //存储移动方向pt_tail = tail - 1;}elsereturn 2; //回合结束标记2代表蛇填满空间break;case 2:if ((head = ++head%SIZE_SK) != tail){ //不相等即蛇节点队列未满snake[head].x = newx; //head+1后存储新坐标为蛇头snake[head].y = newy;snake[head].num = 1;gamemap[newx][newy] = 1;snake[head].md = idx; //存储移动方向pt_tail = tail = tail%SIZE_SK;score++;createFood();}break;case 3:return 1; //遇到墙壁case 1:return 1; //遇到自身default: ;}//打印蛇if (pt_tail == -1)pt_tail++;if (pt_tail < head){ //尾巴在头部后面(这两者是数组索引)for (i=pt_tail; i<=head; i++){pntSnake(i); //打印}}else{for (i=pt_tail; i<SIZE_SK; i++)pntSnake(i);for (i=0; i<=head; i++)pntSnake(i);}gameinfo(" 分数", score);return 0;}void pntSnake(int i){//转换x坐标:内部是连续整数,打印时一个字符占位2,所以要2xpos.X = snake[i].x * 2;pos.Y = snake[i].y;SetConsoleCursorPosition(hOut, pos);if (snake[i].num == 0){putchar('\0'); //清除蛇尾putchar('\0');}else if (snake[i].num == 1){//下面函数第二个参数低4位控制前景色,高4位控制背景色,共8位SetConsoleTextAttribute(hOut, snake[i].col);printf("█");}}void drawEdge(void){int i;for (i=0; i<W; i++){pos.X = i*2; pos.Y = 0;SetConsoleCursorPosition(hOut, pos);printf("█");gamemap[i][pos.Y] = 3;pos.Y = H-1;SetConsoleCursorPosition(hOut, pos);printf("█");gamemap[i][H-1] = 3;}for (i=1; i<H-1; i++){pos.X = 0; pos.Y = i;SetConsoleCursorPosition(hOut, pos);printf("█");gamemap[pos.X][i] = 3;pos.X = (W-1)*2;SetConsoleCursorPosition(hOut, pos);printf("█");gamemap[W-1][i] = 3;}}void gameinfo(char *s, int n){pos.X = 0; pos.Y = H;SetConsoleCursorPosition(hOut, pos);SetConsoleTextAttribute(hOut, 0x2f);printf(" 贪吃蛇");printf(" %s: %d", s, n);}
#include<bits/stdc++.h>#include<conio.h>#include<windows.h>using namespace std;int dsxl,dszdl,zdl=1,zdxl=10,xl=10,a1,a2,a3,a4,a5,a6,a7,money;string s;void sl();void sj();void fy();void bg();void tj();void js();void zd();void zt();void sb();void cg();void ts();void sd();void jm();void gj();void sl(){ printf("You Win!!!"); Sleep(1000); exit(1);}void sj(){ if(a1==2){ if(money>=5){ money-=5; zdxl+=5; sj(); } else bg(); } else{ if(a1==3){ if(money>=7){ money-=7; zdxl+=10; sd(); } else bg(); } else{ if(a1==4){ if(money>=10){ money-=10; zdxl+=15; sd(); } else bg(); } else{ if(a1==5){ if(money>=20){ money-=20; zdxl+=20; sd(); } else bg(); } } } }}void fy(){ system("cls"); printf("1:主界面\n2:木盾 5元\n3:石盾 7元\n4:铁盾 10元\n5:神盾 20元\n"); scanf("%d",&a1); if(a1==1){ system("cls"); ts(); } else sj();}void bg(){ system("cls"); printf("钱数不够!!!"); Sleep(1000); system("cls"); sd();}void tj(){ if(a2==2){ if(money>=5){ money-=5; zdl+=5; sd(); } else bg(); } else{ if(a3==3){ if(money>=7){ money-=7; zdl+=10; sd(); } else bg(); } else{ if(a3==4){ if(money>=10){ money-=10; zdl+=15; sd(); } else bg(); } else{ if(a3==5){ if(money>=20){ money-=20; zdl+=20; sd(); } else bg(); } } } }}void js(){ system("cls"); printf("game over!!!"); Sleep(1000); exit(1);}void zd(){ system("cls"); printf("请输入对手等级:1~16\n"); scanf("%d",&a5); if(a5>16&&a5<1){ system("cls"); zd(); } system("cls"); dszdl=a5*2; dsxl=a5*2; printf("对手血量:%d\n你的血量:%d\n",dsxl,xl); Sleep(1000); system("cls"); printf("对手战斗力:%d\n你的战斗力:%d\n",dszdl,zdl); Sleep(1000); system("cls"); printf("1:进攻 2:逃跑\n"); char k=getch(); if(k==2) jm(); else{ while(xl>0&&dsxl>0){ system("cls"); dsxl-=zdl; xl-=dszdl; printf("对手血量:%d\n你的血量:%d\n",dsxl,xl); Sleep(1000); if(dsxl>0&&xl>0){ system("cls"); printf("1:进攻 2:逃跑\n"); char k=getch(); if(k==2) jm(); if(xl<=0) js(); } if(xl<=0) js(); } if(a6==16) sl(); money=money+a5*2; system("cls"); printf("获得%d个金币。\n",a5*2); system("pause"); jm(); }}void zt(){ printf("当前血量:%d\n最大血量:%d\n钱币数量:%d\n战斗力:%d",xl,zdxl,money,zdl); Sleep(2000); jm();}void sb(){ system("cls"); printf("钱不够!!!"); Sleep(1000); jm();}void cg(){ system("cls"); printf("回血成功!!!"); xl=zdxl; money-=1; Sleep(1000); jm();}void ts(){ printf("**********************************\n"); printf("* 你确定要退出商店吗?1:是 2:否 *\n"); printf("**********************************\n"); Sleep(1000); char k=getch(); if(k=='1') jm(); else sd();}void gj(){ system("cls"); printf("1:主界面\n2:菜刀 5元\n3:匕首 7元\n4:木剑 10元\n5:圣剑 20元\n"); scanf("%d",&a2); if(a2==1){ system("cls"); ts(); } else tj();}void sd(){ system("cls"); printf("1:攻击 2:防御 3:主界面\n"); char k=getch(); system("cls"); if(k=='3') ts(); else if(k=='1') gj(); else if(a2=='2') fy();}void jm(){ system("cls"); printf("1.商店 2.战斗 3.回血 4.状态\n"); char k=getch(); if(k=='1') sd(); if(k=='3'){ if(money>0) cg(); else sb(); } if(k=='4') zt(); if(k=='2') zd();}int main(){ system("cls"); printf("a"); Sleep(100); printf("n"); Sleep(100); printf("d"); Sleep(100); printf("y"); Sleep(100); printf("出"); Sleep(100); printf("版"); Sleep(100); printf(","); Sleep(100); printf("大"); Sleep(100); printf("乱"); Sleep(100); printf("斗"); Sleep(100); printf("。"); Sleep(100); system("cls"); jm(); return 0;}简单吧?这样你就可以尽情的装逼了。
我个人比较喜欢逛论坛,前段时间,我找到一个还不错的论坛,只要成为它的会员,都可以免费下载它的源码噢。有游戏的、商城、网站等等,比自己辛苦敲代码舒服多了。有需要的话可以去看看,只要充值150元就可以成为会员,论坛每天更新源码,超级多的干货,不错。网页链接