赞
踩
环境:DevC++6.7.5
语言:C++
小游戏:
1.贪吃蛇
2.推箱子
3.迷宫
#include <cstdio> #include <iostream> #include <ctime> #include <conio.h> #include <windows.h> #include <cstdlib> #include <cstring> using namespace std; int a[100][100], dir[100][100]; //string guo[5]={'▲','◆','■','▼','★'}; int fx[4][2] = { {0,-1},{1,0},{0,1},{-1,0} }; //ap来记录奖励块的分 int n, m, ff, f = 1, t = 50, T = 50, ap = 10, egg[2], danshu, headx, heady, endx, endy, point = 0, apple = 0, fangx, stopp = 0, panduan = 0; //ff用来判断 panduan 0:中途退出;1:咬到自己;2:重置 int lastfx; int zuobi = 0; int fff[110][110]; string print[4][4] = { {"═","╔"," ","╚"},{"╝","║","╚"," "},{" ","╗","═","╝"},{"╗"," ","╔","║"} }; void color(int a)//颜色函数 { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), a); } void gotoxy(int x, int y)//位置函数(行为x 列为y) { COORD pos; pos.X = 2 * y; pos.Y = x; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); } void reset() { system("cls"); color(7); printf(" ★"); color(10); printf("贪吃蛇"); color(11); printf("★\n\n"); color(7); printf("⊙打印若有错位请调整窗口大小或按r重输小点的数⊙\n\n 请输入场地大小(格式:行数 列数) 推荐(20 20) \n\n>>"); scanf("%d%d", &n, &m); system("cls"); color(14); for (int i = 1; i <= m; i++) { gotoxy(0, i); printf("※"); gotoxy(n + 1, i); printf("※"); } for (int i = 1; i <= n; i++) { gotoxy(i, 0); printf("※"); gotoxy(i, m + 1); printf("※"); } color(10); memset(fff, 0, sizeof(fff)); gotoxy(0, 0); printf("┍"); gotoxy(n + 1, 0); printf("┕"); gotoxy(0, m + 1); printf("┑"); gotoxy(n + 1, m + 1); printf("┙"); color(7); gotoxy(0, m + 5); printf("方向:a/s/d/w | 1/2/3/5"); gotoxy(1, m + 5); printf("暂停:p | 0"); gotoxy(2, m + 5); printf("减速:q/j | 4/7"); gotoxy(3, m + 5); printf("加速:e/k | 6/9"); gotoxy(4, m + 5); printf("重置:r | ."); gotoxy(5, m + 5); printf("地图:h | +"); headx = endx = endy = 1; heady = 3; f = 1; ff = 3; memset(a, 1, sizeof(a)); memset(dir, 0, sizeof(dir)); a[1][1] = a[1][2] = a[1][3] = 0; gotoxy(1, 1); printf("⊙"); gotoxy(1, 2); printf("⊙"); gotoxy(1, 3); printf("◎"); dir[1][1] = dir[1][2] = dir[1][3] = 2; apple = 0; fangx = 2; point = 0; danshu = 0; lastfx = 2; stopp = 0; if (zuobi) { color(12); gotoxy(12, m + 5); printf("作弊可耻!"); gotoxy(m + 4, 0); printf("做了弊还没路走那就救不了你了,乖乖重来吧......"); color(7); } } void haha() { char ch = getch(); if ((ch == 'a' || ch == '1') && dir[headx][heady] != 2) { fangx = 0; return; } if ((ch == 's' || ch == '2') && dir[headx][heady] != 3) { fangx = 1; return; } if ((ch == 'd' || ch == '3') && dir[headx][heady] != 0) { fangx = 2; return; } if ((ch == 'w' || ch == '5') && dir[headx][heady] != 1) { fangx = 3; return; } if (ch == 'p' || ch == '0') { stopp = (stopp + 1) % 2; return; } if (ch == 'q' || ch == '4') { T += 10; if (T >= 1005) T = 1005; return; } if (ch == 'e' || ch == '6') { T -= 10; if (T <= 1) T = 2; return; } if (ch == 'j' || ch == '7') { T += 1; if (T >= 1005) T = 1005; return; } if (ch == 'k' || ch == '9') { T -= 1; if (T <= 1) T = 2; return; } if (ch == 'r' || ch == '.') { ff = 2; f = 0; panduan = 0; return; } if (ch == 'h' || ch == '8') { zuobi += 1; zuobi %= 2; if (zuobi) { color(12); gotoxy(12, m + 5); printf("作弊可耻!"); gotoxy(m + 4, 0); printf("做了弊还没路走那就救不了你了,乖乖重来吧......"); color(7); } else { printf(" "); gotoxy(m + 4, 0); printf(" "); } } if (ch == 'g' || ch == '+') { gotoxy(n + 50, 0); printf("现在切换到地图编辑模式\n\nq/4 为开始放置模式(光标移动过的痕迹会留下障碍物)\n\ne/6 为取消放置障碍物模式\n\nj/0 为橡皮模式(再按一次退出橡皮模式)\n\n按 h/+ 继续游戏\n\n"); printf("\n按任意键开始编辑地图"); color(13); int x = 1, y = 1, dfx, moshi = 0; ch = getch(); gotoxy(0, 0); gotoxy(1, 1); while (ch != 'h' && ch != '+') { if (ch == 'a' || ch == '1') dfx = 0; else if (ch == 's' || ch == '2') dfx = 1; else if (ch == 'd' || ch == '3') dfx = 2; else if (ch == 'w' || ch == '5') dfx = 3; else dfx = 5; if (ch == 'q' || ch == '4') moshi = 1; if (ch == 'e' || ch == '6') moshi = 0; if (ch == 'j' || ch == '0') if (moshi - 2) moshi = 2; else moshi = 0; if (dfx <= 4) { if (x + fx[dfx][0] > 0 && x + fx[dfx][0] <= n && y + fx[dfx][1] > 0 && y + fx[dfx][1] <= m) { x += fx[dfx][0]; y += fx[dfx][1]; } if (x > 0 && x <= n && y > 0 && y <= m) { gotoxy(x, y); if (moshi == 1 && a[x][y] && !fff[x][y]) { a[x][y] = 0; fff[x][y] = 1; printf("□"); } if (moshi == 2 && fff[x][y]) { a[x][y] = 1; fff[x][y] = 0; printf(" "); } gotoxy(x, y); } } ch = getch(); } color(7); } } void findegg() { srand(time(NULL)); int aa = 1; while (!a[egg[0]][egg[1]]) { egg[0] = (rand() % (n)) + 1; egg[1] = (rand() % m) + 1; } a[egg[0]][egg[1]] = 0; point += ap; gotoxy(egg[0], egg[1]); if (!apple) { printf("★"); ap = 8000 / T; if (ap >= 200) ap = 200; } else { printf("●"); ap = 10; } apple++; apple = apple % 10; gotoxy(n + 2, 0); printf("距离下一个奖励蛋还有 "); color(11); cout << 9 - (8 + apple) % 10; color(7); printf(" 个"); danshu++; return; } int gg() { if (ff == 0) return(0); if (ff == 1) { gotoxy(n + 2, 1); Sleep(3000); gotoxy(n + 26, 1); gotoxy(n + 10, 0); printf("哦豁~ 你咬到自己了o( ̄▽ ̄)d\n\n\n你共吃蛋 %d 个\n\n\n你共得分 %d 分,恭喜!\n\n\n等一下就继续", danshu, point); Sleep(5000); if (kbhit) return(1); } if (ff == 2) return(1); return 0; } void dong() { gotoxy(11, m + 3); printf("当前的蛋有 %d 分 ", ap); if (ap - 3 > 10) ap -= 3; if (ap != 10) { gotoxy(egg[0], egg[1]); color(ap % 10); printf("★"); color(7); } int x, y; x = (headx + fx[fangx][0] - 1 + n) % (n)+1; y = (heady + fx[fangx][1] - 1 + m) % (m)+1; dir[headx][heady] = fangx; if (x == egg[0] && y == egg[1]) { gotoxy(headx, heady); cout << print[lastfx][fangx]; dir[headx][heady] = fangx; headx = x; heady = y; a[x][y] = 0; gotoxy(headx, heady); printf("◎"); findegg(); } else if (a[x][y]) { gotoxy(headx, heady); cout << print[lastfx][fangx]; headx = x; heady = y; a[x][y] = 0; gotoxy(headx, heady); printf("◎"); gotoxy(endx, endy); printf(" "); a[endx][endy] = 1; x = endx; y = endy; endx += fx[dir[x][y]][0]; endx = (endx - 1 + n) % (n)+1; endy += fx[dir[x][y]][1]; endy = (endy - 1 + m) % (m)+1; dir[x][y] = -1; } else if (!zuobi) { f = 0; ff = 1; } dir[headx][heady] = fangx; lastfx = fangx; return; } int main() { while (1) { srand(time(NULL)); reset(); egg[0] = (rand() % n - 1) + 2; egg[1] = (rand() % m) + 1; a[egg[0]][egg[1]] = 0; gotoxy(egg[0], egg[1]); if (apple) { printf("★"); ap = 100; } else printf("●"); while (f) { if (kbhit()) haha(); gotoxy(9, m + 5); printf("吃蛋:%d 个", danshu); gotoxy(8, m + 5); printf("速度: %d ", 1005 - T); //while (stopp) {Sleep(10); if (kbhit()) haha();} Sleep(1); t = (t - 1 + T) % T; f (t == 0 && !stopp) dong(); gotoxy(7, m + 5); printf("得分:%d 分", point); gotoxy(12, m + 5); } if (!gg()) return 0; } return 0; }
#include <stdio.h> #include <conio.h> #include <windows.h> #include <time.h> #define Height 25 //迷宫的高度,必须为奇数 #define Width 25 //迷宫的宽度,必须为奇数 #define Wall 1 #define Road 0 #define Start 2 #define End 3 #define Esc 5 #define Up 1 #define Down 2 #define Left 3 #define Right 4 int map[Height+2][Width+2]; void gotoxy(int x,int y) { //移动坐标 COORD coord; coord.X=x; coord.Y=y; SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord ); } void hidden() { //隐藏光标 HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_CURSOR_INFO cci; GetConsoleCursorInfo(hOut,&cci); cci.bVisible=0;//赋1为显示,赋0为隐藏 SetConsoleCursorInfo(hOut,&cci); } void create(int x,int y) { //随机生成迷 int c[4][2]= {0,1,1,0,0,-1,-1,0}; //四个方向 int i,j,t; //将方向打乱 for(i=0; i<4; i++) { j=rand()%4; t=c[i][0]; c[i][0]=c[j][0]; c[j][0]=t; t=c[i][1]; c[i][1]=c[j][1]; c[j][1]=t; } map[x][y]=Road; for(i=0; i<4; i++) if(map[x+2*c[i][0]][y+2*c[i][1]]==Wall) { map[x+c[i][0]][y+c[i][1]]=Road; create(x+2*c[i][0],y+2*c[i][1]); } } int get_key() { //接收按键 char c; while(c=getch()) { if(c==27) return Esc; //Esc if(c!=-32)continue; c=getch(); if(c==72) return Up; //上 if(c==80) return Down; //下 if(c==75) return Left; //左 if(c==77) return Right; //右 } return 0; } void paint(int x,int y) { //画迷宫 gotoxy(2*y-2,x-1); switch(map[x][y]) { case Start: printf("入"); break; //画入口 case End: printf("出"); break; //画出口 case Wall: printf("▇"); break; //画墙 case Road: printf(" "); break; //画路 } } void game() { int x=2,y=1; //玩家当前位置,刚开始在入口处 int c; //用来接收按键 while(1) { gotoxy(2*y-2,x-1); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED); printf("▇▇"); //画出玩家当前位置 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_BLUE|FOREGROUND_RED|FOREGROUND_GREEN); if(map[x][y]==End) { //判断是否到达出口 gotoxy(30,24); printf("到达终点,按任意键结束"); getch(); break; } c=get_key(); if(c==Esc) { gotoxy(0,24); break; } switch(c) { case Up: //向上走 if(map[x-1][y]!=Wall) { paint(x,y); x--; } break; case Down: //向下走 if(map[x+1][y]!=Wall) { paint(x,y); x++; } break; case Left: //向左走 if(map[x][y-1]!=Wall) { paint(x,y); y--; } break; case Right: //向右走 if(map[x][y+1]!=Wall) { paint(x,y); y++; } break; } } } int main() { int i,j; srand((unsigned)time(NULL)); //初始化随即种子 hidden(); //隐藏光标 for(i=0; i<=Height+1; i++) for(j=0; j<=Width+1; j++) if(i==0||i==Height+1||j==0||j==Width+1) //初始化迷宫 map[i][j]=Road; else map[i][j]=Wall; create(2*(rand()%(Height/2)+1),2*(rand()%(Width/2)+1)); //从随机一个点开始生成迷宫,该点行列都为偶数 for(i=0; i<=Height+1; i++) { //边界处理 map[i][0]=Wall; map[i][Width+1]=Wall; } for(j=0; j<=Width+1; j++) { //边界处理 map[0][j]=Wall; map[Height+1][j]=Wall; } map[2][1]=Start; //给定入口 map[Height-1][Width]=End; //给定出口 for(i=1; i<=Height; i++) for(j=1; j<=Width; j++) //画出迷宫 paint(i,j); game(); //开始游戏 getch(); return 0; }
#include<iostream> #include<stdio.h> #include<conio.h> #include <windows.h> using namespace std; void Game_Menu(HANDLE hout); void Game_description(HANDLE hout); void gotoxy(HANDLE hout, int x, int y); int DrawMap(HANDLE hout); void Move(HANDLE hout); int finish(); void setmap(int n); void color(int m); bool flag = true; int pass = 1; #define R 10 #define C 10 #define framex 20 #define framey 14 int map[R][C] = {0}; int map1[R][C] = { { 0,0,1,1,1,0,0,0 }, { 0,0,1,3,1,0,0,0 }, { 0,0,1,0,1,1,1,1 }, { 1,1,1,0,0,4,3,1 }, { 1,3,4,4,0,1,1,1 }, { 1,1,1,5,4,1,0,0 }, { 0,0,0,1,3,1,0,0 }, { 0,0,0,1,1,1,0,0 } }; int map2[R][C]= { {1,1,1,1,1,0,0,0,0,0}, {1,5,0,0,1,0,0,0,0,0}, {1,0,4,4,1,0,1,1,1,0}, {1,0,4,0,1,0,1,3,1,0}, {1,1,1,0,1,1,1,3,1,0}, {0,1,1,0,0,0,0,3,1,0}, {0,1,0,0,0,1,0,0,1,0}, {0,1,0,0,0,1,1,1,1,0}, {0,1,1,1,1,1,0,0,0,0} }; int map3[R][C]= { { 0,0,0,1,1,1,1,1,1,1 }, { 0,0,1,1,0,0,1,0,5,1 }, { 0,0,1,0,0,0,1,0,0,1 }, { 0,0,1,4,0,4,0,4,0,1 }, { 0,0,1,0,4,1,1,0,0,1 }, { 1,1,1,0,4,0,1,0,1,1 }, { 1,3,3,3,3,3,0,0,1,0 }, { 1,1,1,1,1,1,1,1,1,0 }, }; void Game_Menu(HANDLE hout) { system("cls"); gotoxy(hout, framex, 1); cout << "*******************"; gotoxy(hout, framex, 3); cout << " 推箱子 "; gotoxy(hout, framex, 5); cout << " 按s或S开始 "; gotoxy(hout, framex, 7); cout << " 按q或Q退出 "; gotoxy(hout, framex, 9); cout << "游戏前关闭中文输入 "; gotoxy(hout, framex, 11); cout << "*******************"; _getch(); }; void Game_description(HANDLE hout) { //操作提示 system("cls"); gotoxy(hout, framex, 1); cout << "*****************************"; gotoxy(hout, framex, 3); cout << " 按方向键上下左右移动 "; gotoxy(hout, framex, 5); cout << " 所有箱子到达目的地游戏胜利 "; gotoxy(hout, framex, 7); cout << " 按q或Q退出 "; gotoxy(hout, framex, 9); cout << "*****************************"; }; void gotoxy(HANDLE hout, int x, int y) { COORD pos; pos.X = x; pos.Y = y; SetConsoleCursorPosition(hout, pos); }; void print(int i) { switch(i) { case 0: color(0x7); cout << " "; break; case 1: color(8); cout << "■"; break; case 3: color(0xE); cout << "◇"; break; case 4: color(4); cout << "□"; break; case 5: color(3); cout << "♀"; break; case 7: color(6); cout << "◆"; break; case 8: color(3); cout << "♀"; break; default: break; } } int DrawMap(HANDLE hout) { gotoxy(hout, framex + C, framey - 3); color(0xF); cout << "第" << pass << "关"; for(int i = 0; i < R; i++) { gotoxy(hout, framex, framey + i); for(int j = 0; j < C; j++) { print(map[i][j]); } } return 0; }; void Move(HANDLE hout) { int x = 0, y = 0; for(int i = 0; i < R; i++) { for(int j = 0; j < C; j++) { if(map[i][j] == 5 || map [i] [j] == 8) { x = i; y = j; break; } } } gotoxy(hout, framex, framey + R); color(0xF); printf("当前位置:(%d, %d)", x, y); int ch = _getch(); switch(ch) { case 'w': case 'W': case 72: if(map[x - 1][y] == 0 || map[x - 1][y] == 3) { map[x][y] -= 5; gotoxy(hout, framex + 2 * y, framey + x); print(map[x][y]); map[x - 1][y] += 5; gotoxy(hout, framex + 2 * y, framey + x - 1); print(map[x - 1][y]); } else if(map[x - 1][y] == 4 || map[x - 1][y] == 7) { if(map[x - 2][y] == 0 || map[x - 2][y] == 3) { map[x][y] -= 5; gotoxy(hout, framex + 2 * y, framey + x); print(map[x][y]); map[x - 1][y] += 1; gotoxy(hout, framex + 2 * y, framey + x - 1); print(map[x - 1][y]); map[x - 2][y] += 4; gotoxy(hout, framex + 2 * y, framey + x - 2); print(map[x - 2][y]); } } break; case 's': case 'S': case 80: if(map[x + 1][y] == 0 || map[x + 1][y] == 3) { map[x][y] -= 5; gotoxy(hout, framex + 2 * y, framey + x); print(map[x][y]); map[x + 1][y] += 5; gotoxy(hout, framex + 2 * y, framey + x + 1); print(map[x + 1][y]); } else if(map[x + 1][y] == 4 || map[x + 1][y] == 7) { if(map[x + 2][y] == 0 || map[x + 2][y] == 3) { map[x][y] -= 5; gotoxy(hout, framex + 2 * y, framey + x); print(map[x][y]); map[x + 1][y] += 1; gotoxy(hout, framex + 2 * y, framey + x + 1); print(map[x + 1][y]); map[x + 2][y] += 4; gotoxy(hout, framex + 2 * y, framey + x + 2); print(map[x + 2][y]); } } break; case 'a': case 'A': case 75: if(map[x][y - 1] == 0 || map[x][y - 1] == 3) { map[x][y] -= 5; gotoxy(hout, framex + 2 * y, framey + x); print(map[x][y]); map[x][y - 1] += 5; gotoxy(hout, framex + 2 * y - 2, framey + x); print(map[x][y - 1]); } else if(map[x][y - 1] == 4 || map[x][y - 1] == 7) { if(map[x][y - 2] == 0 || map[x][y - 2] == 3) { map[x][y] -= 5; gotoxy(hout, framex + 2 * y, framey + x); print(map[x][y]); map[x][y - 1] += 1; gotoxy(hout, framex + 2 * y - 2, framey + x); print(map[x][y - 1]); map[x][y - 2] += 4; gotoxy(hout, framex + 2 * y - 4, framey + x); print(map[x][y - 2]); } } break; case 'd': case 'D': case 77: if(map[x][y + 1] == 0 || map[x][y + 1] == 3) { map[x][y] -= 5; gotoxy(hout, framex + 2 * y, framey + x); print(map[x][y]); map[x][y + 1] += 5; gotoxy(hout, framex + 2 * y + 2, framey + x); print(map[x][y + 1]); } else if(map[x][y + 1] == 4 || map[x][y + 1] == 7) { if(map[x][y + 2] == 0 || map[x][y + 2] == 3) { map[x][y] -= 5; gotoxy(hout, framex + 2 * y, framey + x); print(map[x][y]); map[x][y + 1] += 1; gotoxy(hout, framex + 2 * y + 2, framey + x); print(map[x][y + 1]); map[x][y + 2] += 4; gotoxy(hout, framex + 2 * y + 4, framey + x); print(map[x][y + 2]); } } break; case 'q': case 'Q': flag = false; default: break; } }; int finish() { //判断游戏结束 for(int i = 0; i < R; i++) { for(int j = 0; j < C; j++) { if(map[i][j] == 4)return 0; } } return 1; }; void setmap(int n) { switch(n) { case 1: memcpy(map, map1, sizeof(map1)); break; case 2: memcpy(map, map2, sizeof(map2)); break; case 3: memcpy(map, map3, sizeof(map3)); break; } }; void color(int m) { //改变输出符号的颜色 HANDLE consolehend; consolehend = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(consolehend, m); }; int main() { HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE); Game_Menu(hout); char ch = getch(); setmap(pass); Game_description(hout); DrawMap(hout); if(ch == 'q' || ch == 'Q') { return 0; } while(flag) { Move(hout); if(finish()) { DrawMap(hout); gotoxy(hout, framex, framey + R); cout << " 恭喜,成功过关!"; gotoxy(hout, framex, framey + R + 2); cout << "重玩(R)"; ch = getch(); system("cls"); pass++; if(ch == 'r' || ch == 'R')pass--; if(pass > 3) { gotoxy(hout, framex, framey); cout << " 您已通过全部关卡!"; getch(); flag = false; } else { setmap(pass); Game_description(hout); DrawMap(hout); } } } return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。