C++各种经典小游戏
目录
俄罗斯方块(上下左右键控制)
Fly bird
贪吃蛇
吃豆人
迷宫(随机)
打方块
狼人杀(人机)
俄罗斯方块(上下左右键控制)
//上下左右键控制
#include<bits/stdc++.h>
#include<windows.h>
int a[24][17],i,j,tim=800,ti=800,shape=0,b,bn,ta[4][4],turn[4][4],nex[4][4],nextshape,add=0,score=0,speed=1,ok=1,mouse=0,best=0;
void Place(const int x, const int y)
{
COORD PlaceCursorHere;
PlaceCursorHere.X = y;
PlaceCursorHere.Y = x;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), PlaceCursorHere);
return;
}
void color(int x)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),x);
}
void appear()
{
for(i=3; i<=22; i++) for(j=1; j<=15; j++) if(a[i][j]!=0){Place(i-2,2*j);printf("■");}
}
void disappear()
{
for(i=3; i<=22; i++) for(j=1; j<=15; j++) if(a[i][j]==2){Place(i-2,2*j);printf(" ");}
}
int search(int x0,int y0,int x,int y)
{
POINT pt;
HWND h=GetForegroundWindow();
GetCursorPos(&pt);
ScreenToClient(h,&pt);
if(pt.x>=x0&&pt.y>=y0&&pt.x<=x&&pt.y<=y)
{if(mouse!=0){Sleep(100);return 2;}else return 1;
}
else return 0;
}
void button(int x)
{
int m=x*10;
if(x<3)
{Place(22,m);printf("┌┄┄┄┐");Place(23,m);{if(x==0){if(ok!=0) printf("┆开始 ┆");else printf("┆暂停 ┆");}if(x==1) printf("┆重置 ┆");if(x==2) printf("┆退出 ┆");}Place(24,m);printf("└┄┄┄┘");
}
else
{Place(9,m-33);printf("┌┄┄┐");Place(10,m-33);{if(x==4) printf("┆是┆");else printf("┆否┆");}Place(11,m-33);printf("└┄┄┘");
}
}
void menu(int x)
{
int k,l;
if(x==0)
{if(ok!=0){ok=0;return;}else while(1){mouse=GetAsyncKeyState(VK_LBUTTON);Place(9,13);printf("暂停");if(search(7,360,71,390)==2) break;Sleep(50);}Place(9,12);for(j=1; j<=6; j++) printf(" "); //appear();
}
else
{for(i=1; i<=20; i++) for(j=2; j<=30; j++){Place(i,j);printf(" ");}Place(7,2);for(i=1; i<=15; i++) printf("┄");Place(12,2);for(i=1; i<=15; i++) printf("┄");Place(8,6);printf("你想要 ");if(x==1) printf("重置?");if(x==2) printf("exit?");button(4);button(5);while(1){mouse=GetAsyncKeyState(VK_LBUTTON);for(i=0; i<=1; i++){k=search(63+i*80,150,110+i*80,180);if(k!=2){if(k==1) color(15);else color(7);button(i+4);}else{for(l=7; l<=12; l++) for(j=2; j<=30; j++){Place(l,j);printf(" ");}if(i==0){if(x==1) ok=2;else exit(0);}return;}}Sleep(50);}
}
}
void click()
{
for(i=0; i<=2; i++)
{mouse=GetAsyncKeyState(VK_LBUTTON);int k=search(i*80+7,360,i*80+71,390);if(k!=2){if(k==1) color(15);else color(7);button(i);color(7);}else{menu(i);return;}
}
Sleep(50);
}
void ss()
{
Place(9,39);
printf("%d",score);
if(score>=speed*100)
{speed++;ti=ti-200;if(ti<0) ti=0;else{for(i=1; i<=4; i++){Place(9,12);printf("加速!");Sleep(70);Place(9,12);for(j=1; j<=9; j++) printf(" ");Sleep(70);}Sleep(200);}
}
if(best<score) best=score;
appear();
Place(12,39);
printf("%d",speed);
Place(15,39);
printf("%d",best);
}
void replace()
{
for(i=1; i<=20; i++) for(j=2; j<=30; j++){Place(i,j);printf(" ");}
for(i=0; i<=22; i++) for(j=1; j<=15; j++) a[i][j]=0;
for(i=1; i<=15; i++) a[23][i]=1;
for(i=1; i<=23; i++)
{a[i][0]=1;a[i][16]=1;
}
ss();
tim=800;
ti=800;
shape=0;
add=0;
score=0;
speed=1;
}
void change(int x)
{
int q=0,l;
for(l=1; l<=x; l++)
{for(j=0; j<=2+add; j++){for(i=2+add; i>=0; i--){turn[j][q]=ta[i][j];q++;if(q>2+add) q=0;}}for(i=0; i<=3; i++) for(j=0; j<=3; j++) ta[i][j]=turn[i][j];
}
}
void born()
{
int x,q=0;
srand(time(NULL));
bn=b;
shape=nextshape;
x=rand()%12+1;
if(b==5&&x>1)
{x--;add=1;
}
for(i=0; i<=2+add; i++) for(j=x; j<=x+2+add; j++){a[i][j]=nex[i][q];q++;if(q>2+add) q=0;}
add=0;
}
void next()
{
srand(time(NULL));
b=rand()%7;
nextshape=rand()%4;
add=0;
for(i=3; i<=6; i++) for(j=37; j<=45; j++){Place(i,j);printf(" ");}
for(i=0; i<=3; i++) for(j=0; j<=3; j++) nex[i][j]=turn[i][j]=ta[i][j]=0;
ta[1][1]=2;
if(b==0) ta[1][2]=ta[1][0]=ta[0][1]=2;
if(b==1) ta[1][2]=ta[1][0]=ta[0][0]=2;
if(b==2) ta[1][2]=ta[1][0]=ta[0][2]=2;
if(b==3) ta[1][0]=ta[0][1]=ta[0][2]=2;
if(b==4) ta[0][0]=ta[0][1]=ta[1][2]=2;
if(b==5)
{ta[1][0]=ta[1][2]=ta[1][3]=2;add=1;
}
if(b==6) ta[0][0]=ta[0][1]=ta[1][0]=2;
if(nextshape>0&&b!=6)
{change(nextshape);for(i=0; i<=3; i++) for(j=0; j<=3; j++){nex[i][j]=turn[i][j];if(nex[i][j]==2){Place(i+3,j*2+37);printf("■");}}
}
else
{for(i=0; i<=3; i++) for(j=0; j<=3; j++){nex[i][j]=ta[i][j];if(nex[i][j]==2){Place(i+3,j*2+37);printf("■");}}
}
}
void clear()
{
int c=0,f=0,l[23],s=0,k;
for(i=3; i<=22; i++)
{l[i]=0;for(j=1; j<=15; j++) c=a[i][j]+c;if(c==15){for(j=1; j<=15; j++) a[i][j]=0;for(k=i-1; k>=2; k--) for(j=1; j<=15; j++) a[k+1][j]=a[k][j];f++;l[i]=1;s=5;}c=0;
}
score=score+f*10;
while(f>1)
{score=score+f*5;f--;
}
f=0;
while(s>0)
{for(i=22; i>=3; i--) if(l[i]==1){Place(i-2,2);for(j=1; j<=15; j++) printf("■");}Sleep(70);for(i=22; i>=3; i--) if(l[i]==1){Place(i-2,2);for(j=1; j<=30; j++) printf(" ");}Sleep(70);s--;
}
for(i=3; i<=22; i++) for(j=1; j<=15; j++){Place(i-2,2*j);printf(" ");}
appear();
}
void control()
{
int up,down,right,left,c=0,d=0,x,y,no=0,k,l=0,q=0;
k=shape;
add=0;
up=GetAsyncKeyState(VK_UP);
down=GetAsyncKeyState(VK_DOWN);
right=GetAsyncKeyState(VK_RIGHT);
left=GetAsyncKeyState(VK_LEFT);
if(down!=0)
{tim=0;
}
if(left!=0||right!=0)
{Sleep(100);disappear();for(i=0; i<=22; i++) for(j=1; j<=15; j++){if(a[i][j]==2&&a[i][j-1]!=1) c++;if(a[i][j]==2&&a[i][j+1]!=1) d++;}for(i=0; i<=22; i++) for(j=1; j<=15; j++) if(left!=0&&c==4&&a[i][j]==2){a[i][j-1]=a[i][j];a[i][j]=0;}for(i=0; i<=22; i++) for(j=15; j>=1; j--) if(right!=0&&d==4&&a[i][j]==2){a[i][j+1]=a[i][j];a[i][j]=0;}appear();
}
if(up!=0&&bn!=6)
{Sleep(150);disappear();for(i=0; i<=22; i++){for(j=1; j<=15; j++) if(a[i][j]==2){x=i;no=1;break;}if(no==1) break;}no=0;for(j=1; j<=15; j++){for(i=0; i<=22; i++) if(a[i][j]==2){y=j;no=1;break;}if(no==1) break;}no=0;if(k==1) y--;if(k==2) x--;add=0;if(bn==5){add=1;if(k==0||k==2) x--;if(k==1||k==3) y--;}for(i=0; i<=3; i++) for(j=0; j<=3; j++) ta[i][j]=a[x+i][y+j];if(bn>=0&&bn<5){if(k==0) ta[2][0]=0;if(k==1) ta[0][0]=0;if(k==2) ta[0][2]=0;if(k==3) ta[2][2]=0;}if(bn==5){if(k==0) ta[0][3]=ta[2][0]=ta[2][1]=ta[3][1]=ta[3][0]=0;if(k==1) ta[0][0]=ta[1][0]=ta[0][1]=ta[1][1]=ta[3][3]=0;if(k==2) ta[3][0]=ta[0][2]=ta[0][3]=ta[1][2]=ta[1][3]=0;if(k==3) ta[0][0]=ta[2][2]=ta[2][3]=ta[3][2]=ta[3][3]=0;}for(i=0; i<=2+add; i++) for(j=0; j<=2+add; j++) if(ta[i][j]!=1) l++;if(l==9+add*7){change(1);for(i=0; i<=22; i++) for(j=1; j<=15; j++) if(a[i][j]==2) a[i][j]=0;for(i=0; i<=2+add; i++) for(j=0; j<=2+add; j++) if(turn[i][j]==2) a[x+i][y+j]=turn[i][j];shape++;}if(shape>3) shape=0;appear();
}
}
int main()
{
int k,start,finish,d;
printf("┌");
for(i=1; i<=15; i++) printf("┄");
printf("┐\n");
for(i=1; i<=20; i++) printf("┆\n");
printf("└");
for(i=1; i<=15; i++) printf("┄");
printf("┘");
for(i=1; i<=20; i++)
{Place(i,32);printf("┆\n");
}
Place(2,37);
printf("下一个");
Place(8,37);
printf("得分");
Place(14,37);
printf("最高分");
Place(11,37);
printf("速度");
for(i=0; i<=2; i++) button(i);
while(ok==1) click();
while(ok!=1)
{replace();next();while(1){born();next();while(1){appear();k=0;start=clock();while(1){finish=clock();d=finish-start;if(d>=tim) break;control();click();if(ok==2) break;}if(ok==2) break;disappear();for(i=22; i>=0; i--) for(j=1; j<=15; j++) if(a[i][j]==2&&a[i+1][j]!=1) k++;if(k==4){for(i=22; i>=0; i--) for(j=1; j<=15; j++) if(a[i][j]==2){a[i+1][j]=2;a[i][j]=0;}}else{for(i=22; i>=0; i--) for(j=1; j<=15; j++) if(a[i][j]==2) a[i][j]=1;break;}tim=ti;appear();}if(ok==2) break;appear();clear();ss();for(i=1; i<=15; i++) if(a[2][i]==1){ok=1;break;}}if(ok==2){ok=0;continue;}for(i=1; i<=20; i++) for(j=2; j<=30; j++){Place(i,j);printf(" ");}Place(9,12);printf("游戏结束!");while(ok==1) click();
}
return 0;
}
Fly bird
#include<bits/stdc++.h>
#include<Windows.h>
#define PR_Box printf("■")
#define PR_Gold printf("★")
#define PR_Ag printf("☆")
#define PR_FBird printf("Ю")
#define PR_DBird printf("Ф")
#define PR_Land printf("┳┳┯")
#define PR_Bg_TL printf("╔")
#define PR_Bg_TR printf("╗")
#define PR_Bg_DL printf("╚")
#define PR_Bg_DR printf("╝")
#define PR_Bg_X printf("═")
#define PR_Bg_Y printf("║")
#define PR_Blank printf(" ");
int Grade=1,C_Gold=0,C_Ag=0,Score=0,Delay_time=1000,Max_blank=9,Distance=18;
struct Birds {
int x,y;
int condition;
};
Birds*Bird=(Birds*)malloc(sizeof(Birds));
struct Bg {
int x,y;
int l_blank;
int reward[9];
Bg*pri;
Bg*next;
};
Bg*Bg1=new Bg[sizeof(Bg)];
void Position(int x,int y) {
COORD pos= {x-1,y-1};
HANDLE Out=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(Out,pos);
}
void CreatBird() {
Bird->x=41;
Bird->y=10;
Bird->condition=0;
}
void CreatBg() {
Bg*Bg2=(Bg*)malloc(sizeof(Bg));
Bg1->x=90;
Bg1->y=8;
Bg2->x=Bg1->x+Distance;
Bg2->y=9;
Bg1->l_blank=Max_blank-Grade;
Bg2->l_blank=Max_blank-Grade;
Bg1->next=Bg2;
Bg1->pri=Bg2;
Bg2->next=Bg1;
Bg2->pri=Bg1;
}
void InsertBg(Bg*p) {
int temp;
Bg*Bgs=(Bg*)malloc(sizeof(Bg));
Bgs->x=p->pri->x+Distance;
Bgs->l_blank=Max_blank-Grade;
srand((int)time(0));
temp=rand();
if(temp%2==0) {if((temp%4+p->pri->y+Max_blank-Grade)<21)Bgs->y=p->pri->y+temp%4;else Bgs->y=p->pri->y;
} else {if((p->pri->y-temp%4)>2)Bgs->y=p->pri->y-temp%4;else Bgs->y=p->pri->y;
}
Bgs->pri=p->pri;
Bgs->next=p;
p->pri->next=Bgs;
p->pri=Bgs;
}
void Check_Bg(Bg*q) {
Bg*p=q;
int i=0,temp;
while(++i<=5) {if(p->x>-4)p=p->next;else {srand((int)time(0));temp=rand();if(temp%2==0) {if((temp%4+p->y+Max_blank-Grade)<21)p->y=p->y+temp%4;else p->y=p->y;p->x=p->pri->x+Distance;p->l_blank=Max_blank-Grade;} else {if((p->y-temp%4)>2)p->y=p->y-temp%4;else p->y=p->y;p->x=p->pri->x+Distance;p->l_blank=Max_blank-Grade;}}
}
}
void Loop_Bg(Bg*q) {
Bg*p=q;
int i=0;
while(++i<=5) {p->x=p->x-1;p=p->next;if(Bird->x==p->x) {Score+=1;if(Score%4==0&&Grade<4)Grade++;}
}
}
void Prt_Bg(Bg*q) {
Bg*p=q;
int i=0,k,j;
while(++i<=5) {if(p->x>0&&p->x<=78) {for(k=2; k<p->y; k++) {Position(p->x+1,k);PR_Box;PR_Box;PR_Blank}Position(p->x,p->y);PR_Box;PR_Box;PR_Box;PR_Blank;Position(p->x,p->y+p->l_blank);PR_Box;PR_Box;PR_Box;PR_Blank;k=k+p->l_blank+1;for(k; k<=22; k++) {Position(p->x+1,k);PR_Box;PR_Box;PR_Blank;}Position(p->x,23);for(k=1; k<Distance/3-2; k++)PR_Land;}p=p->next;if(p->x==0) {for(j=2; j<p->y; j++) {Position(p->x+1,j);PR_Blank;PR_Blank;}Position(p->x+1,p->y);PR_Blank;PR_Blank;PR_Blank;Position(p->x+1,p->y+Max_blank-Grade);PR_Blank;PR_Blank;PR_Blank;j=j+Max_blank-Grade+1;for(j; j<=22; j++) {Position(p->x+1,j);PR_Blank;PR_Blank;}}
}
}
void PrtBg() {
int i;
Position(1,1);
PR_Bg_TL;
Position(79,1);
PR_Bg_TR;
Position(1,24);
PR_Bg_DL;
Position(79,24);
PR_Bg_DR;
for(i=3; i<=78; i+=2) {Position(i,1);PR_Bg_X;Position(i,24);PR_Bg_X;
}
}
void PrtBird() {
Position(Bird->x,Bird->y-1);
PR_Blank;
Position(Bird->x,Bird->y);
PR_FBird;
Position(38,2);
printf("Score:%d",Score);
}
int CheckYN(Bg*q) {
Bg*p=q;
int i=0;
while(++i<=5) {if(Bird->y>23)return 0;if(Bird->x==p->x&&Bird->y<=p->y)return 0;if((Bird->x==p->x||Bird->x==p->x+1||Bird->x==p->x+2)&&Bird->y==p->y)return 0;if(Bird->x==p->x&&Bird->y>p->y+p->l_blank)return 0;if((Bird->x==p->x||Bird->x==p->x+1||Bird->x==p->x+2)&&Bird->y==p->y+p->l_blank)return 0;p=p->next;
}
return 1;
}
void Prtfirst() {
printf("══════════════════════════════════════\n");
printf(" ■■ ■■\n");
printf(" ■■ ■■\n");
printf(" ■■ ■■\n");
printf(" ■■ ■■\n");
printf(" ■■ ■■ C++语言版 Flappy Bird\n");
printf(" ■■ ■■ 瞎搞人:侦探鼠\n");
printf(" ■■ ■■ 瞎搞日期:2019.7.3\n");
printf(" ■■ ■■ 耗时:2.46小时\n");
printf(" ■■■ ■■ 游戏说明:\n");
printf(" ■■ 1-按上箭头使鸟起飞\n");
printf(" ■■ 2-等级越高,难度越大!\n");
printf(" Ю ■■■\n");
printf("\n");
printf(" \n\n\n\n\n\n\n\n");
printf(" ┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳\n");
system("pause");
Position(1,1);
int i=0;
while(i++<40*25)PR_Blank;
}
int main() {
int i=0;
char ch;
Prtfirst();
PrtBg();
CreatBg();
InsertBg(Bg1);
InsertBg(Bg1);
InsertBg(Bg1);
CreatBird();
while(1) {if(!CheckYN(Bg1))break;Check_Bg(Bg1);Prt_Bg(Bg1);PrtBird();Loop_Bg(Bg1);Bird->y=Bird->y+1;if(GetAsyncKeyState(VK_UP)) {Position(Bird->x,Bird->y-1);PR_Blank;Bird->y=Bird->y-4;}while(i++<500);{Sleep(100);}i=0;
}
Position(38,10);
printf("Game Over!");
Position(1,25);
system("pause");
}
贪吃蛇
#include <cstdio>
#include <iostream>
#include <ctime>
#include <conio.h>
#include <windows.h> //停顿:Sleep();
#include <cstdlib> //清屏:system("cls");
#include <cstring> //1:'◎' 2:'⊙' 3:'▲' 4:'◆' 5:'■'
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;if (t == 0 && !stopp) dong();gotoxy(7, m + 5); printf("得分:%d 分", point);gotoxy(12, m + 5);}if (!gg()) return 0;
}
return 0;
}
吃豆人
#include <cstdio>
#include <iostream>
#include <ctime>
#include <conio.h>
#include <windows.h> //停顿:Sleep();
#include <cstdlib> //清屏:system("cls");
#include <cstring> //1:'◎' 2:'⊙' 3:'▲' 4:'◆' 5:'■'
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;if (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; //Escif(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<bits/stdc++.h>//打方块 Windows10
#include<windows.h>
using namespace std;
int fen,mb[10][18],leaf;void kg(int a) {for(int i=0; i<a; i++)cout<<' ';
}void go(int x, int y) {COORD p;p.X=(x-1)*2;p.Y=y-1;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p);
}void printtu(int x,int y,bool a) {go(x,y);cout<<"■";if(x>2&&x<11) {go(x-1,y+1);cout<<"■■■";} else if(x==2) {go(x,y+1);cout<<"■■";} else if(x==11) {go(x-1,y+1);cout<<"■■";} else;if(a)for(int i=0; i<18; i++) {go(2,i+2);kg(20);}Sleep(100);go(x,y);kg(2);if(x>2&&x<11) {go(x-1,y+1);kg(6);} else if(x==2) {go(x,y+1);kg(4);} else if(x==11) {go(x-1,y+1);kg(4);} else;go(14,5);kg(4);cout<<"\b\b\b\b"<<fen;if(a)for(int i=0; i<18; i++) {go(2,i+2);for(int o=0; o<10; o++) {if(mb[o][i])cout<<"■";else kg(2);}}
}void sj(int x) {int i;for(i=19;; i--) {go(x,i);cout<<"■";Sleep(10);cout<<"\b\b";kg(2);if(i<3)break;if(mb[x-2][i-3]==1)break;}mb[x-2][i-2]=1;go(x,i);cout<<"■";fen-=10;for(int o=0; o<10; o++)if(mb[o][i-2]==0)return;for(int o=0; o<10; o++)mb[o][i-2]=0;for(int o=i-2; o<17; o++)for(int j=0; j<10; j++)mb[j][o]=mb[j][o+1];for(int o=0; o<10; o++)mb[o][17]=0;printtu(x,20,1);fen+=100;
}void mouse(int &x,int &y) {POINT p;HWND h=GetForegroundWindow();GetCursorPos(&p);ScreenToClient(h,&p);x=p.x;y=p.y;
}void m(int wt) {
lkr:;fen=-500;leaf=8;srand(time(0));system("mode con cols=33 lines=24");system("cls");cout<<"┌ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┐"<<endl;cout<<"┆ ";kg(20);cout<<"┆"<<endl;cout<<"┆ ";kg(20);cout<<"┆"<<endl;cout<<"┆ ";kg(20);cout<<"┆ 分数"<<endl;cout<<"┆ ";kg(20);cout<<"┆"<<endl;cout<<"┆ ";kg(20);cout<<"┆"<<endl;cout<<"┆ ";kg(20);cout<<"┆ 生命"<<endl;cout<<"┆ ";kg(20);cout<<"┆ ";printf("%c %c %c %c\n",3,3,3,3);cout<<"┆ ";kg(20);cout<<"┆ ";printf("%c %c %c %c\n",3,3,3,3);cout<<"┆ ";kg(20);cout<<"┆"<<endl;cout<<"┆ ";kg(20);cout<<"┆"<<endl;cout<<"┆ ";kg(20);cout<<"┆"<<endl;cout<<"┆ ";kg(20);cout<<"┆"<<endl;cout<<"┆ ";kg(20);cout<<"┆"<<endl;cout<<"┆ ";kg(20);cout<<"┆"<<endl;cout<<"┆ ";kg(20);cout<<"┆"<<endl;cout<<"┆ ";kg(20);cout<<"┆"<<endl;cout<<"┆ ";kg(20);cout<<"┆"<<endl;cout<<"┆ ";kg(20);cout<<"┆"<<endl;cout<<"┆ ";kg(20);cout<<"┆"<<endl;cout<<"┆ ";kg(20);cout<<"┆"<<endl;cout<<"└ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┘"<<endl;
lk:;for(int i=0; i<10; i++)for(int o=0; o<18; o++)mb[i][o]=0;int x=6;for(int i=wt*10;;) {if(i<wt*10)goto asd;for(int i=0; i<10; i++)for(int o=0; o<18; o++)if(mb[i][o]!=0)goto qwe;fen+=500;
qwe:;for(int o=0; o<10; o++)if(mb[o][17]==1)goto as;for(int o=17; o>0; o--)for(int j=0; j<10; j++)mb[j][o]=mb[j][o-1];for(int o=0; o<10; o++)mb[o][0]=rand()%2;asd:;if(GetAsyncKeyState(VK_RIGHT)!=0&&x<11)x++;if(GetAsyncKeyState(VK_LEFT)!=0&&x>2)x--;if(GetAsyncKeyState(VK_UP)!=0)sj(x);printtu(x,20,i>=wt*10);if(i<wt*10)i++;else i=1;}
as:;for(int i=2; i<22; i++) {go(2,i);kg(20);}fen-=600;switch(leaf) {case 1:go(13,8);cout<<' '<<' ';break;case 2:leaf--;go(14,8);cout<<' '<<' ';goto lk;case 3:leaf--;go(15,8);cout<<' '<<' ';goto lk;case 4:leaf--;go(16,8);cout<<' '<<' ';goto lk;case 5:leaf--;go(13,9);cout<<' '<<' ';goto lk;case 6:leaf--;go(14,9);cout<<' '<<' ';goto lk;case 7:leaf--;go(15,9);cout<<' '<<' ';goto lk;case 8:leaf--;go(16,9);cout<<' '<<' ';goto lk;}go(5,7);cout<<"你输了!";go(3,8);cout<<" ┆ 再来[R]┆ ┆ 返回[E]┆";for(;;) {if(GetAsyncKeyState('R')!=0||GetAsyncKeyState('r')!=0)goto lkr;if(GetAsyncKeyState('E')!=0||GetAsyncKeyState('e')!=0)return;}
}void dafangkuai() {}
int main() {SetConsoleTitle("打方块Windows10");int q=3;
a:;system("mode con cols=80 lines=25");system("cls");bool jh[8][27]= {0,0,1,0,0,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,1,1,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,1,1,1,1,0,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,1,0,1,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,1,0,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,1,1,0,0,0,1,0,0,0,0,1,1,0,0,0,1,1,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0};for(int i=2; i<10; i++) {go(7,i);for(int o=0; o<27; o++) {if(jh[i-2][o])cout<<"■";else cout<<' '<<' ';}}go(17,11);cout<<"|开始游戏|";go(17,13);cout<<"|设置游戏|";go(17,15);cout<<"|游戏规则|";go(17,17);cout<<"|退出游戏|";go(1,23);cout<<"[L]确定";int y=1;for(;;) {if(GetAsyncKeyState(VK_DOWN)!=0)y+=((y==4)?-3:1);if(GetAsyncKeyState(VK_UP)!=0)y-=((y==1)?-3:1);if(GetAsyncKeyState('l')!=0||GetAsyncKeyState('L')!=0)switch(y) {case 1:system("cls");m(q);goto a;case 2:system("cls");go(16,11);cout<<' '<<q<<"秒增加一行";go(16,10);printf("[%c]",30);go(16,12);printf("[%c]",31);go(1,23);cout<<"[K]确定";for(;;) {if(GetAsyncKeyState(VK_UP)!=0&&q<9) {q++;go(16,11);cout<<' '<<q;}if(GetAsyncKeyState(VK_DOWN)!=0&&q>1) {q--;go(16,11);cout<<' '<<q;}if(GetAsyncKeyState('k')!=0||GetAsyncKeyState('K')!=0)goto a;Sleep(100);}case 3:MessageBox(0,"点确定浏览规则" ,"规则",MB_OK);MessageBox(0,"←→控制炮台","规则",MB_OK);MessageBox(0,"满一行即消除","规则",MB_OK);MessageBox(0,"每消除一行+100","规则",MB_OK);MessageBox(0,"少一条命-100","规则",MB_OK);MessageBox(0,"全部消除+500","规则",MB_OK);MessageBox(0,"发射一炮-10","规则",MB_OK);case 4:return 0;}go(16,11);cout<<' '<<' ';go(22,11);cout<<' ';go(16,13);cout<<' '<<' ';go(22,13);cout<<' ';go(16,15);cout<<' '<<' ';go(22,15);cout<<' ';go(16,17);cout<<' '<<' ';go(22,17);cout<<' ';go(16,9+2*y);cout<<' '<<'>';go(22,9+2*y);cout<<'<';Sleep(100);}
}
狼人杀(人机)
#include<bits/stdc++.h>
using namespace std;
int life[7]={1,1,1,1,1,1};
int potions[5]={-1,1};
int vote[7]={0};
string name[7]={"预言家","女巫","平民","平民","狼人","狼人"};
int seer(int x,int y,int n,int p1,int p2,int l1,int l2)
{
int rescued;
int die;
int die_potions;
bool gameover=false;
while(gameover==false)
{cout<<endl<<"下一天:----------------------------"<<endl;for(int i=1;i<=4;i++){if(i==1&&(life[l1]>=0 or life[l2]>=0)){cout<<"狼人:"<<endl;srand((unsigned)time(NULL)); die=rand()%6;while(name[die]=="狼人"||life[die]==-1) die=rand()%6;life[die]--;cout<<"狼人杀了"<<name[die]<<endl;}if(i==2&&life[x]>=0){cout<<"预言家:"<<endl;cout<<"你是预言家,请输入0~5的编号(代表相应的人)(除了"<<x<<"号)来预言"<<endl;int res;cin>>res;if(name[res]=="平民"||name[res]=="女巫"||name[res]=="预言家") cout<<"好人"<<endl; if(name[res]=="狼人") cout<<"坏人"<<endl; }if(i==3&&life[n]>=0){cout<<"女巫:"<<endl;int dor;srand((unsigned)time(NULL)); dor=rand()%3;if(dor==0){die_potions=rand()%6;while(name[die_potions]=="女巫"||life[die_potions]<=0) die_potions=rand()%6;life[die_potions]--;potions[dor]++;cout<<"女巫杀了"<<name[die_potions]<<endl;}if(dor==1){int help;for(int i=0;i<6;i++) if(life[i]==0) life[i]++,help=i;potions[dor]--;cout<<"女巫救了"<<name[help]<<endl;}if(dor==2){cout<<"没用药"<<endl; }}if(i==4){int sum_die=0;cout<<"今晚";for(int j=0;j<6;j++){if(life[j]==0) {sum_die++;life[j]--;cout<<j<<"号"<<name[j]<<"死了"; }} if(sum_die==0) cout<<"是平安夜";int fl=0,fp=0;for(int j=0;j<6;j++){if(life[j]==1){if(name[j]=="狼人") fl++;else fp++;}}if(fl==0) {cout<<endl<<"平民赢了"<<endl; gameover=true;continue;}if(fp==0){cout<<endl<<"狼人赢了"<<endl;gameover=true; continue;}cout<<endl<<"投票"<<endl; int a[7]={0,0,0,0,0,0};for(int j=0;j<6;j++){if(j==x&&life[x]==1) {cout<<"请投0~5号你认为是狼人的";int ps;cin>>ps;a[ps]++; }else if(life[j]==1){srand((unsigned)time(NULL)); int cs;cs=rand()%6;while(life[cs]!=1||cs==j) cs=rand()%6;a[cs]++;}}cout<<"投票结果:"<<endl;cout<<"0 1 2 3 4 5"<<endl;for(int j=0;j<6;j++) cout<<a[j]<<" ";cout<<endl;int max=-1,mp;for(int j=0;j<6;j++) if(a[j]>=max) max=a[j],mp=j;cout<<mp<<"号"<<name[mp]<<"出局"<<endl<<endl;life[mp]=-1; int good=0,bad=0;for(int j=0;j<6;j++){if(life[j]==1&&(name[j]=="平民"||name[j]=="女巫"||name[j]=="预言家")) good++;if(life[j]==1&&name[j]=="狼人") bad++;}if(bad==0) {cout<<"平民赢了"<<endl;gameover=true;}if(good==0) {cout<<"狼人赢了"<<endl;gameover=true;}}}system("pause");
}
return 0;
}
int Lycan(int x,int y,int n,int p1,int p2,int l1,int l2)
{
int rescued;
int die;
int die_potions;
bool gameover=false;
while(gameover==false)
{cout<<endl<<"下一天:----------------------------"<<endl;for(int i=1;i<=4;i++){if(i==1&&life[x]>=0){cout<<"狼人:"<<endl;cout<<"你是狼人,请输入0~5的编号(代表相应的人)(除了"<<x<<"和"<<l1+l2-x<<"号)来杀死"<<endl; cin>>die;life[die]--;cout<<"狼人杀了"<<name[die]<<endl;}if(i==1&&life[x]==-1&&life[l1+l2-x]>=0){cout<<"狼人:"<<endl;srand((unsigned)time(NULL)); die=rand()%6;while(name[die]=="狼人"||life[die]==-1) die=rand()%6;life[die]--;cout<<"狼人杀了"<<name[die]<<endl;}if(i==2&&life[y]>=0){cout<<"预言家:"<<endl;cout<<"预言完毕"<<endl; }if(i==3&&life[n]>=0){cout<<"女巫:"<<endl;int dor;srand((unsigned)time(NULL)); dor=rand()%3;if(dor==0){die_potions=rand()%6;while(name[die_potions]=="女巫"||life[die_potions]<=0) die_potions=rand()%6;life[die_potions]--;potions[dor]++;cout<<"女巫杀了"<<name[die_potions]<<endl;}if(dor==1){int help;for(int i=0;i<6;i++) if(life[i]==0) life[i]++,help=i;potions[dor]--;cout<<"女巫救了"<<name[help]<<endl;}if(dor==2){cout<<"没用药"<<endl; }}if(i==4){int sum_die=0;cout<<"今晚";for(int j=0;j<6;j++){if(life[j]==0) {sum_die++;life[j]--;cout<<j<<"号"<<name[j]<<"死了"; }} if(sum_die==0) cout<<"是平安夜";int fl=0,fp=0;for(int j=0;j<6;j++){if(life[j]==1){if(name[j]=="狼人") fl++;else fp++;}}if(fl==0) {cout<<endl<<"平民赢了"<<endl; gameover=true;continue;}if(fp==0){cout<<endl<<"狼人赢了"<<endl;gameover=true; continue;}cout<<endl<<"投票"<<endl; int a[7]={0,0,0,0,0,0};for(int j=0;j<6;j++){if(j==x&&life[x]==1) {cout<<"请投0~5号你认为是狼人的";int ps;cin>>ps;a[ps]++; }else if(life[j]==1){srand((unsigned)time(NULL)); int cs;cs=rand()%6;while(life[cs]!=1||cs==j) cs=rand()%6;a[cs]++;}}cout<<"投票结果:"<<endl;cout<<"0 1 2 3 4 5"<<endl;for(int j=0;j<6;j++) cout<<a[j]<<" ";cout<<endl;int max=-1,mp;for(int j=0;j<6;j++) if(a[j]>=max) max=a[j],mp=j;cout<<mp<<"号"<<name[mp]<<"出局"<<endl<<endl;life[mp]=-1; int good=0,bad=0;for(int j=0;j<6;j++){if(life[j]==1&&(name[j]=="平民"||name[j]=="女巫"||name[j]=="预言家")) good++;if(life[j]==1&&name[j]=="狼人") bad++;}if(bad==0) {cout<<"平民赢了"<<endl;gameover=true;}if(good==0) {cout<<"狼人赢了"<<endl;gameover=true;}}}system("pause");
}
return 0;
}
int witch(int x,int y,int n,int p1,int p2,int l1,int l2)
{
int rescued;
int die;
int die_potions;
bool gameover=false;
while(gameover==false)
{cout<<endl<<"下一天:----------------------------"<<endl;for(int i=1;i<=4;i++){if(i==1&&(life[l1]>=0 or life[l2]>=0)){cout<<"狼人:"<<endl;srand((unsigned)time(NULL)); die=rand()%6;while(name[die]=="狼人"||life[die]==-1) die=rand()%6;life[die]--;cout<<"狼人杀了"<<name[die]<<endl;}if(i==2&&life[y]>=0){cout<<"预言家:"<<endl;cout<<"预言完毕"<<endl; }if(i==3&&life[n]>=0){cout<<"女巫:"<<endl;cout<<"你是女巫,请输入d、r、n。d代表要杀、r代表要救,n代表不用药"<<endl;char dor;cin>>dor;if(dor=='d'){cout<<"请输入0~5号你要杀的人(除了"<<n<<"号)"<<endl;cin>>die_potions;life[die_potions]--;potions[0]++;cout<<"女巫杀了"<<name[die_potions]<<endl;}if(dor=='r'){int help;for(int i=0;i<6;i++) if(life[i]==0) life[i]++,help=i;potions[1]--;cout<<"女巫救了"<<name[help]<<endl;}if(dor=='n'){cout<<"没用药"<<endl; }}if(i==4){int sum_die=0;cout<<"今晚";for(int j=0;j<6;j++){if(life[j]==0) {sum_die++;life[j]--;cout<<j<<"号"<<name[j]<<"死了"; }} if(sum_die==0) cout<<"是平安夜";int fl=0,fp=0;for(int j=0;j<6;j++){if(life[j]==1){if(name[j]=="狼人") fl++;else fp++;}}if(fl==0) {cout<<endl<<"平民赢了"<<endl; gameover=true;continue;}if(fp==0){cout<<endl<<"狼人赢了"<<endl;gameover=true; continue;}cout<<endl<<"投票"<<endl; int a[7]={0,0,0,0,0,0};for(int j=0;j<6;j++){if(j==x&&life[x]==1) {cout<<"请投0~5号你认为是狼人的";int ps;cin>>ps;a[ps]++; }else if(life[j]==1){srand((unsigned)time(NULL)); int cs;cs=rand()%6;while(life[cs]!=1||cs==j) cs=rand()%6;a[cs]++;}}cout<<"投票结果:"<<endl;cout<<"0 1 2 3 4 5"<<endl;for(int j=0;j<6;j++) cout<<a[j]<<" ";cout<<endl;int max=-1,mp;for(int j=0;j<6;j++) if(a[j]>=max) max=a[j],mp=j;cout<<mp<<"号"<<name[mp]<<"出局"<<endl<<endl;life[mp]=-1; int good=0,bad=0;for(int j=0;j<6;j++){if(life[j]==1&&(name[j]=="平民"||name[j]=="女巫"||name[j]=="预言家")) good++;if(life[j]==1&&name[j]=="狼人") bad++;}if(bad==0) {cout<<"平民赢了"<<endl;gameover=true;}if(good==0) {cout<<"狼人赢了"<<endl;gameover=true;}}}system("pause");
}
return 0;
}
int commoner(int x,int y,int n,int p1,int p2,int l1,int l2)
{
int rescued;
int die;
int die_potions;
bool gameover=false;
while(gameover==false)
{cout<<endl<<"下一天:----------------------------"<<endl;for(int i=1;i<=4;i++){if(i==1&&(life[l1]>=0 or life[l2]>=0)){cout<<"狼人:"<<endl;srand((unsigned)time(NULL)); die=rand()%6;while(name[die]=="狼人"||life[die]==-1) die=rand()%6;life[die]--;cout<<"狼人杀了"<<name[die]<<endl;}if(i==2&&life[y]>=0){cout<<"预言家:"<<endl;cout<<"预言完毕"<<endl; }if(i==3&&life[n]>=0){cout<<"女巫:"<<endl;int dor;srand((unsigned)time(NULL)); dor=rand()%3;if(dor==0){die_potions=rand()%6;while(name[die_potions]=="女巫"||life[die_potions]<=0) die_potions=rand()%6;life[die_potions]--;potions[dor]++;cout<<"女巫杀了"<<name[die_potions]<<endl;}if(dor==1){int help;for(int i=0;i<6;i++) if(life[i]==0) life[i]++,help=i;potions[dor]--;cout<<"女巫救了"<<name[help]<<endl;}if(dor==2){cout<<"没用药"<<endl; }}if(i==4){int sum_die=0;cout<<"今晚";for(int j=0;j<6;j++){if(life[j]==0) {sum_die++;life[j]--;cout<<j<<"号"<<name[j]<<"死了"; }} if(sum_die==0) cout<<"是平安夜";int fl=0,fp=0;for(int j=0;j<6;j++){if(life[j]==1){if(name[j]=="狼人") fl++;else fp++;}}if(fl==0) {cout<<endl<<"平民赢了"<<endl; gameover=true;continue;}if(fp==0){cout<<endl<<"狼人赢了"<<endl;gameover=true; continue;}cout<<endl<<"投票"<<endl; int a[7]={0,0,0,0,0,0};for(int j=0;j<6;j++){if(j==x&&life[x]==1) {cout<<"请投0~5号你认为是狼人的";int ps;cin>>ps;a[ps]++; }else if(life[j]==1){srand((unsigned)time(NULL)); int cs;cs=rand()%6;while(life[cs]!=1||cs==j) cs=rand()%6;a[cs]++;}}cout<<"投票结果:"<<endl;cout<<"0 1 2 3 4 5"<<endl;for(int j=0;j<6;j++) cout<<a[j]<<" ";cout<<endl;int max=-1,mp;for(int j=0;j<6;j++) if(a[j]>=max) max=a[j],mp=j;cout<<mp<<"号"<<name[mp]<<"出局"<<endl<<endl;life[mp]=-1; int good=0,bad=0;for(int j=0;j<6;j++){if(life[j]==1&&(name[j]=="平民"||name[j]=="女巫"||name[j]=="预言家")) good++;if(life[j]==1&&name[j]=="狼人") bad++;}if(bad==0) {cout<<"平民赢了"<<endl;gameover=true;}if(good==0) {cout<<"狼人赢了"<<endl;gameover=true;}}}system("pause");
}
return 0;
}
int main()
{
begin:
cout<<"狼人杀"<<endl;
cout<<"1个预言家 1个女巫 2个平民 2个狼人"<<endl;
srand((unsigned)time(NULL));
for(int i=1;i<=1000;i++)
{int x=rand()%6; int y=rand()%6;swap(name[x],name[y]);
}
int player=rand()%6;
cout<<"你是"<<name[player]<<endl<<"您的编号是"<<player<<endl<<endl;
int l1,l2,l=1;
int y;
int n;
int p1,p2,p=1;
for(int i=0;i<6;i++)
{if(name[i]=="狼人"&&l==1) {l1=i;l++;continue;}if(name[i]=="狼人"&&l==2) l2=i,l++;if(name[i]=="预言家") y=i;if(name[i]=="女巫") n=i;if(name[i]=="平民"&&p==1) {p1=i;p++;continue;}if(name[i]=="平民"&&p==2) p2=i,p++;
}
if(player==y) seer(player,y,n,p1,p2,l1,l2);
if(player==l1 or player==l2) Lycan(player,y,n,p1,p2,l1,l2);
if(player==n) witch(player,y,n,p1,p2,l1,l2);
if(player==p1 or player==p2) commoner(player,y,n,p1,p2,l1,l2);
else return 0;
}
C++各种经典小游戏相关推荐
- python经典小游戏-用Python设计一个经典小游戏:猜大小
码农那点事儿 关注我们,一起学习进步 本文主要介绍如何用Python设计一个经典小游戏:猜大小. 游戏规则: 初始本金是1000元,默认赔率是1倍,赢了,获得一倍金额,输了,扣除1倍金额. 玩家选择下 ...
- 20行python代码的入门级小游戏-用Python设计一个经典小游戏
本文主要介绍如何用Python设计一个经典小游戏:猜大小. 在这个游戏中,将用到前面我介绍过的所有内容:变量的使用.参数传递.函数设计.条件控制和循环等,做个整体的总结和复习. 游戏规则: 初始本金是 ...
- python经典小游戏-用Python设计一个经典小游戏
本文主要介绍如何用Python设计一个经典小游戏:猜大小. 在这个游戏中,将用到前面我介绍过的所有内容:变量的使用.参数传递.函数设计.条件控制和循环等,做个整体的总结和复习. 游戏规则: 初始本金是 ...
- python拼图游戏代码_GitHub 上哪些勾起回忆的经典小游戏(Python)
经常有人问我 Python 能开发游戏吗?今天就直接给大家推荐一个汇集多款经典小游戏的Github项目:Free Python Games. 项目地址:grantjenks/free-python-g ...
- c语言经典游戏,C语言——经典小游戏——打砖块
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 C语言--经典小游戏--打砖块 玩法:按A与D控制球拍的移动,按S暂停游戏 百度网盘下载:http://pan.baidu.com/s/1o64ECTc ...
- Windows经典小游戏--扫雷精装版
Windows经典小游戏–扫雷精装版 最开始玩的电脑游戏就是蜘蛛纸牌和扫雷了,那时候觉得很神奇的事情现在自己也可以做了.下面就展示一下C语言扫雷的代码. 首先创建一个"扫雷"的项目 ...
- 经典小游戏(密室逃脱全集+答案)
经典小游戏--密室逃脱全集(有答案) 转自月影梦魇原来玩过的一个小游戏 最近想起来想发给大家玩一下 有一点小难度的哦 看谁可以出得来密室 一共有三个密室 这三个游戏是有一点相连的 蓝色房间 ...
- Python版经典小游戏愤怒的小鸟源代码,基于pygame+pymunk
Python版经典小游戏愤怒的小鸟源代码,基于pygame+pymunk 程序依赖:pygame2.0.1, pymunk5.5.0 直接运行main.py 完整代码下载地址:Python版经典小游戏 ...
- C#winform 经典小游戏贪吃蛇V1.0(一)
关于V1.0 为什么我给这个版本定义为V1.0嘞,因为在这个版本中仅仅实现了蛇的自动行进,按键对蛇的行进方向的操作和吃掉食物蛇身的增长等操作. 但是任何事情都必须一步一步来,当我们完成这个乞丐版的 ...
- c++编写手机小游戏代码_经典小游戏大集合(C++ 源码)
[实例简介] 五子棋 贪吃蛇 俄罗斯方块 黑白棋 连连看 推箱子 扫雷等7个小游戏 C++源码 VC6.0 下编译运行. [实例截图] [核心代码] 经典小游戏大集合(C源码) └── 经典小游戏大集 ...
最新文章
- spark和python的关系_spark submit和pyspark有什么区别?
- LATEX论文排版学习资源汇总
- 她13岁自己造飞机,17岁进麻省理工,3篇黑洞论文被霍金引用......
- API网关和AWS Lambda进行身份验证
- selenium定位元素的方法_selenium定位元素之冻结窗口
- 一个程序员的郁闷吐槽
- PHP依赖管理工具Composer配置安装及基本使用
- Struts迭代器(iterator)遍历List常用的4种例子 - 冯世杰
- html前端显示tiff
- 手机设备唤醒计算机,手机微信实现网络唤醒电脑(WOL),远程开机,WakeOnLan – 全栈笔记...
- Flowable入门系列文章195 - JMX的组态和服务URL
- Android App应用启动分析与优化
- 点到超平面距离的原理推导
- 百度名词~杂篇--(对日常遇到事物的深入了解)
- 使用raw input 代替全局键盘钩子
- matlab imagesc
- zookeeper日志删除
- 制作Mac的U盘启动系统
- 前端练手案例之日历(原生)一
- Microsoft SQL Server 2019 下载、安装及Java JDBC配置连接数据库(多图详解 超详细)