c++游戏源码,不骗,不是伪代码

不废话,来看

1.双人枪战

#include <iostream>
#include <cstdio>
#include <windows.h>
#include <conio.h>
using namespace std;
int SIZ = 20;
HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);
COORD coord;
HANDLE hCon;
enum Color { DARKBLUE = 1, DARKGREEN, DARKTEAL, DARKRED, DARKPINK, DARKYELLOW, GRAY, DARKGRAY, BLUE, GREEN, TEAL, RED, PINK, YELLOW, WHITE };
void SetColor(Color c) {
    if (hCon == NULL)
        hCon = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hCon, c);
}
SYSTEMTIME sys;
//sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute, sys.wSecond,sys.wMilliseconds,sys.wDayOfWeek
struct PLAYER {
    int x, y;
    int hp;
    int gun;
    int direct;
} p1, p2;
int map[1005][1005];
int abs(int x) {
    if (x < 0) return -x;
    return x;
}
void locate(int x, int y) {
    coord.X = y - 1;
    coord.Y = x - 1;
    SetConsoleCursorPosition(hout, coord);
}
void print_map() {
    locate(1, 1);
    SetColor(GRAY);
    for (int i = 1; i <= SIZ; i++) cout << "■";
    locate(SIZ, 1);
    for (int i = 1; i <= SIZ; i++) cout << "■";
    for (int i = 2; i < SIZ; i++) {
        locate(i, 1);
        cout << "■";
        locate(i, SIZ * 2 - 1);
        cout << "■";
    }
    locate(SIZ + 1, 1);
    SetColor(WHITE);
}
void create_tree(int x, int y) {
    map[x][y] = map[x + 1][y] = map[x - 1][y] = map[x][y + 1] = map[x][y - 1] = 2;
}
void use_map(int x) {
    if (x == 1) {
        SIZ = 20;
        SetColor(DARKGREEN);
        map[16][6] = map[15][6] = map[17][6] = map[16][7] = map[16][5] = map[14][13] = map[13][12] = map[13][13] = 2;
        for (int i = 2; i < SIZ; i++) {
            for (int j = 2; j < SIZ; j++) {
                if (map[i][j] == 2) {
                    locate(i, j * 2 - 1);
                    cout << "■";
                }
            }
        }
        SetColor(GRAY);
        for (int i = 5; i <= 15; i++) {
            map[i][i] = 1;
            locate(i, i * 2 - 1);
            cout << "■";
        }
        SetColor(WHITE);
    } else if (x == 2) {
        SIZ = 30;
        SetColor(GRAY);
        for (int i = 4; i <= 26; i++) {
            if (i == 13 || i == 14 || i == 15) continue;
            map[i][4] = map[4][i] = map[26][i] = map[i][26] = 1;
        }
        for (int i = 1; i <= SIZ; i++) {
            for (int j = 1; j <= SIZ; j++) {
                if (map[i][j] == 1) {
                    locate(i, j * 2 - 1);
                    cout << "■";
                }
            }
        }
        SetColor(DARKGREEN);
        for (int i = 10; i <= 20; i++) {
            if (i == 13 || i == 17) continue;
            map[i][10] = map[10][i] = map[20][i] = map[i][20] = 2;
        }
        create_tree(5, 5);
        create_tree(18, 18);
        for (int i = 1; i <= SIZ; i++) {
            for (int j = 1; j <= SIZ; j++) {
                if (map[i][j] == 2) {
                    locate(i, j * 2 - 1);
                    cout << "■";
                }
            }
        }
        SetColor(WHITE);
    }
}
void cleanbody(int x, int y);
void putbody(int x, int y, int z);
void player_init() {
    p1.hp = p2.hp = 300;
    p1.gun = p2.gun = 1;
    p1.direct = 4;
    p2.direct = 2;
    p1.x = 2;
    p1.y = 2;
    p2.x = SIZ - 1;
    p2.y = SIZ - 1;
    putbody(p1.x, p1.y, 1);
    putbody(p2.x, p2.y, 2);
}
void mapinit() {
    for (int i = 1; i <= SIZ; i++) {
        map[i][1] = map[1][i] = map[SIZ][i] = map[i][SIZ] = 1;
    }
}
void init() {
    printf("Use Which Map?\n");
    int x;
    cin >> x;
    system("cls");
    use_map(x);
    mapinit();
    print_map();
    player_init();
}
void putbody(int x, int y, int z) {
    if (z == 1) SetColor(BLUE);
    else if (z == 2) SetColor(RED);
    locate(x, y * 2 - 1);
    cout << "■";
    SetColor(WHITE);
}
void cleanbody(int x, int y) {
    locate(x, y * 2 - 1);
    cout << " ";
}
/*
    LIST
    direct:
        w 1
        a 2
        s 3
        d 4
    gun:
        usp 1
        mimigun 2
        awp 3
    block:
        void 0
        stone 1
        tree 2
        player 3
        clip 4
*/
bool judge(int x, int y) {
    if (map[x][y] == 1) return false;
    if (map[x][y] == 2) return false;
    if (map[x][y] == 3) return false;
    return true;
}
bool judge_gun(int x, int y) {
    if (map[x][y] == 1) return 0;
    if (map[x][y] == 2) return 0;
    if (map[x][y] == 3) {
        if (p1.x == x && p1.y == y) p1.hp -= 50; //此处暂时不管威力
        else p2.hp -= 50;
        return 0;
    }
    return 1;
}
int cnt;
struct Clip {
    int x, y;
    int derect;
    int force;
    int start;
    bool flag;
} clip[1000000];
void create_clip(int y, int x, int a, int b) {
    int X, Y;
    if (y == 1) {
        if (!judge_gun(a - 1, b)) return;
        X = a - 1;
        Y = b;
    } else if (y == 2) {
        if (!judge_gun(a, b - 1)) return;
        X = a;
        Y = b - 1;
    } else if (y == 3) {
        if (!judge_gun(a + 1, b)) return;
        X = a + 1;
        Y = b;
    } else if (y == 4) {
        if (!judge_gun(a, b + 1)) return;
        X = a;
        Y = b + 1;
    }
    cnt++;
    GetLocalTime( &sys );
    clip[cnt].start = sys.wMilliseconds + sys.wSecond * 60 + sys.wHour * 3600;
    clip[cnt].x = X;
    clip[cnt].y = Y;
    if (x == 1) {
        clip[cnt].derect = p1.direct;
    } else if (x == 2) {
        clip[cnt].derect = p2.direct;
    }
}
void shoot(int x) {
    if (x == 1) {
        create_clip(p1.direct, 1, p1.x, p1.y);
    } else if (x == 2) {
        create_clip(p2.direct, 2, p2.x, p2.y);
    }
}
void clean_clip(int x, int y) {
    locate(x, y * 2 - 1);
    cout << "  ";
    locate(1, 1);
}
void print_clip(int x, int y, int i) {
    if (clip[i].flag) {
        clean_clip(x, y);
        return;
    }
    locate(x, y * 2 - 1);
    SetColor(YELLOW);
    cout << "''";
    locate(1, 1);
//  system("pause");
}
void clipmove() {
    GetLocalTime( &sys );
    int t = sys.wMilliseconds + sys.wSecond * 60 + sys.wHour * 3600;
    for (int i = 1; i <= cnt; i++) {
        if (clip[i].flag) continue;
        if (abs(clip[i].start - t) > 50) {
            clip[i].start = t;
            int x = clip[i].x;
            int y = clip[i].y;
            if (clip[i].derect == 1) {
                if (!judge_gun(clip[i].x - 1, clip[i].y)) {
                    clip[i].flag = 1;
                    clean_clip(x, y);
                    continue;
                }
                clean_clip(clip[i].x, clip[i].y);
                clip[i].x--;
                print_clip(clip[i].x, clip[i].y, i);
            } else if (clip[i].derect == 2) {
                if (!judge_gun(clip[i].x, clip[i].y - 1)) {
                    clip[i].flag = 1;
                    clean_clip(x, y);
                    continue;
                }
                clean_clip(clip[i].x, clip[i].y);
                clip[i].y--;
                print_clip(clip[i].x, clip[i].y, i);
            } else if (clip[i].derect == 3) {
                if (!judge_gun(clip[i].x + 1, clip[i].y)) {
                    clip[i].flag = 1;
                    clean_clip(x, y);
                    continue;
                }
                clean_clip(clip[i].x, clip[i].y);
                clip[i].x++;
                print_clip(clip[i].x, clip[i].y, i);
            } else if (clip[i].derect == 4) {
                if (!judge_gun(clip[i].x, clip[i].y + 1)) {
                    clip[i].flag = 1;
                    clean_clip(x, y);
                    continue;
                }
                clean_clip(clip[i].x, clip[i].y);
                clip[i].y++;
                print_clip(clip[i].x, clip[i].y, i);
            }
        }
    }
}
void judge_hp() {
    int x = p1.hp;
    int y = p2.hp;
    if (x < 0 && y < 0 && x > y) swap(x, y);
    if (x <= 0) {
        locate(1, 1);
        system("cls");
        printf("GAME OVER!\nTHE WINNER IS P2!");
        Sleep(5000);
        printf("\n-MADE BY Floatiy-");
        getch();
        exit(0);
    } else if (y <= 0) {
        locate(1, 1);
        system("cls");
        printf("GAME OVER!\nTHE WINNER IS P1!");
        Sleep(5000);
        printf("\n-MADE BY Floatiy-");
        getch();
        exit(0);
    }
}
void prog() {
    char ch;
    while (true) {
        if (kbhit()) {
            ch = getch();
            if (ch == 'w' && judge(p1.x - 1, p1.y)) {
                p1.direct = 1;
                cleanbody(p1.x, p1.y);
                map[p1.x][p1.y] = 0;
                putbody(--p1.x, p1.y, 1);
                map[p1.x][p1.y] = 3;
            } else if (ch == '8' && judge(p2.x - 1, p2.y)) {
                p2.direct = 1;
                cleanbody(p2.x, p2.y);
                map[p2.x][p2.y] = 0;
                putbody(--p2.x, p2.y, 2);
                map[p2.x][p2.y] = 3;
            } else if (ch == 'a' && judge(p1.x, p1.y - 1)) {
                p1.direct = 2;
                cleanbody(p1.x, p1.y);
                map[p1.x][p1.y] = 0;
                putbody(p1.x, --p1.y, 1);
                map[p1.x][p1.y] = 3;
            } else if (ch == '4' && judge(p2.x, p2.y - 1)) {
                p2.direct = 2;
                cleanbody(p2.x, p2.y);
                map[p2.x][p2.y] = 0;
                putbody(p2.x, --p2.y, 2);
                map[p2.x][p2.y] = 3;
            } else if (ch == 's' && judge(p1.x + 1, p1.y)) {
                p1.direct = 3;
                cleanbody(p1.x, p1.y);
                map[p1.x][p1.y] = 0;
                putbody(++p1.x, p1.y, 1);
                map[p1.x][p1.y] = 3;
            } else if (ch == '5' && judge(p2.x + 1, p2.y)) {
                p2.direct = 3;
                cleanbody(p2.x, p2.y);
                map[p2.x][p2.y] = 0;
                putbody(++p2.x, p2.y, 2);
                map[p2.x][p2.y] = 3;
            } else if (ch == 'd' && judge(p1.x, p1.y + 1)) {
                p1.direct = 4;
                cleanbody(p1.x, p1.y);
                map[p1.x][p1.y] = 0;
                putbody(p1.x, ++p1.y, 1);
                map[p1.x][p1.y] = 3;
            } else if (ch == '6' && judge(p2.x, p2.y + 1)) {
                p2.direct = 4;
                cleanbody(p2.x, p2.y);
                map[p2.x][p2.y] = 0;
                putbody(p2.x, ++p2.y, 2);
                map[p2.x][p2.y] = 3;
            } else if (ch == '0') {
                shoot(2);
            } else if (ch == ' ') {
                shoot(1);
            }
            Sleep(20);
        }
        clipmove();
        judge_hp();
    }
}
void welcome() {
    printf("操作方法:\n玩家1 wasd控制移动,空格攻击\n玩家2 数字小键盘4568控制移动,0攻击\n");
    Sleep(2000);
}
int main() {
    welcome();
    GetLocalTime( &sys );
    init();
    prog();
    return 0;
}

绝对好玩,和好基友玩了一上午

2.老游戏,贪吃蛇

#include <bits/stdc++.h>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <conio.h>
#include <cmath>
#include <windows.h>
using namespace std;
/*** 光标定位 ***/
HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE);
COORD coord;
void locate(int x,int y) {
	coord.X=y;
	coord.Y=x;
	SetConsoleCursorPosition(hout,coord);
};
/*** 隐藏光标 ***/
void hide() {
	CONSOLE_CURSOR_INFO cursor_info= {1,0};
	SetConsoleCursorInfo(hout, &cursor_info);
}
/*** 生成随机数 ***/
double random(double start, double end) {
	return start+(end-start)*rand()/(RAND_MAX + 1.0);
}
/*** 定义地图的长宽,蛇的坐标,长度,方向,食物的位置 ***/
int m,n;
struct node {
	int x,y;
} snake[1000];
int snake_length,dir;
node food;
int direct[4][2]= {{-1,0},{1,0},{0,-1},{0,1}};
/*** 输出墙 ***/
void print_wall() {
	cout << " ";
	for (int i=1; i<=n; i++)
		cout << "-";
	cout << endl;
	for (int j=0; j<=m-1; j++) {
		cout << "|";
		for (int i=1; i<=n; i++) cout << " ";
		cout << "|" << endl;
	}
	cout << " ";
	for (int i=1; i<=n; i++)
		cout << "-";
}
/*** 首次输出蛇,其中snake[0]代表头 ***/
void print_snake() {
	locate(snake[0].x,snake[0].y);
	cout << "#";
	for (int i=1; i<=snake_length-1; i++) {
		locate(snake[i].x,snake[i].y);
		cout << "*";
	}
}
/*** 判断是否撞墙或者自撞 ***/
bool is_correct() {
	if (snake[0].x==0 || snake[0].y==0 || snake[0].x==m+1 || snake[0].y==n+1) return false;
	for (int i=1; i<=snake_length-1; i++) {
		if (snake[0].x==snake[i].x && snake[0].y==snake[i].y) return false;
	}
	return true;
}
/*** 随机生成并输出食物位置 ***/
bool print_food() {
	srand((unsigned)time(0));
	bool e;
	while (1) {
		e=true;
		int i=(int) random(0,m)+1,j=(int) random(0,n)+1;
		food.x=i;
		food.y=j;
		for (int k=0; k<=snake_length-1; k++) {
			if (snake[k].x==food.x && snake[k].y==food.y) {
				e=false;
				break;
			}
		}
		if (e) break;
	}
	locate(food.x,food.y);
	cout << "$";
	return true;
}
/*** 蛇的前进 ***/
bool go_ahead() {
	node temp;
	bool e=false;
	temp=snake[snake_length-1];
	for (int i=snake_length-1; i>=1; i--)
		snake[i]=snake[i-1];
	snake[0].x+=direct[dir][0];
	snake[0].y+=direct[dir][1];
	locate(snake[1].x,snake[1].y);
	cout << "#";
	/*** 吃到了食物 ***/
	if (snake[0].x==food.x && snake[0].y==food.y) {
		snake_length+=2;
		e=1;
		snake[snake_length-1]=temp;
	}
	/*** 输出此时蛇状态 ***/
	if (!e) {
		locate(temp.x,temp.y);
		cout << " ";
	} else
		print_food();
	locate(snake[0].x,snake[0].y);
	cout << "@";
	/*** 如果自撞 ***/
	if (!is_correct()) {
		system("cls");
		cout << "You lose!" << endl << "Length: " << snake_length << endl;
		return false;
	}
	return true;
}

/*** 主函数 ***/
int main() {
	while(1) {
		cout << "---------------------贪吃蛇----------------------" << endl;
		cout << " 请注意窗口大小,以免发生错位.建议将窗口调为最大." << endl;
		cout << "先选择难度.请在1-100中输入1个数,1最简单,100则最难" << endl;
		cout << " 然后进入游戏画面,以方向键控制方向.祝你游戏愉快!" << endl;
		cout << "-------------------------------------------------" << endl;
		m=25;
		n=40;
		if (m<10 || n<10 || m>25 || n>40) {
			cout << "ERROR" << endl;
			system("pause");
			return 0;
		}
		int hard;
		cin >> hard;
		if (hard<=0 || hard>100) {
			cout << "ERROR" << endl;
			system("pause");
			return 0;
		}
		/*** 数据全部初始化,包括蛇长,位置,方向 ***/
		snake_length=5;
		clock_t a,b;
		char ch;
		double hard_len;
		for (int i=0; i<=4; i++) {
			snake[i].x=1;
			snake[i].y=5-i;
		}
		dir=3;
		/*** 输出初始地图,蛇与食物 ***/
		system("cls");
		hide();
		print_wall();
		print_food();
		print_snake();
		locate(m+2,0);
		cout << "You length is: ";
		/*** 开始游戏 ***/
		while (1) {
			/*** 难度随长度增加而提高 ***/
			hard_len=(double)snake_length/(double) (m*n);
			/*** 调节时间,单位是ms ***/
			a=clock();
			while (1) {
				b=clock();
				if (b-a>=(int)(400-30*hard)*(1-sqrt(hard_len))) break;
			}
			/*** 接受键盘输入的上下左右,并以此改变方向 ***/
			if (kbhit()) {
				ch=getch();
				if (ch==-32) {
					ch=getch();
					switch(ch) {
						case 72:
							if (dir==2 || dir==3)
								dir=0;
							break;
						case 80:
							if (dir==2 || dir==3)
								dir=1;
							break;
						case 75:
							if (dir==0 || dir==1)
								dir=2;
							break;
						case 77:
							if (dir==0 || dir==1)
								dir=3;
							break;
					}
				}
			}
			/*** 前进 ***/
			if (!go_ahead()) break;
			/*** 在最后输出此时长度 ***/
			locate(m+2,12);
			cout << snake_length;
		}
		system("pause");
	}
	return 0;
}

3.飞机大战

#include<iostream>
#include<windows.h>
#include<conio.h>
#include<time.h>
#include<string>
using namespace std;

/*=============== all the structures ===============*/

typedef struct Frame
{
    COORD position[2];
    int flag;
}Frame;


/*=============== all the functions ===============*/

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) 之间的坐标填充为 ch
void 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] 之间填充为 ch
void 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] 之间的坐标填充为 ch
void 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] 之间填充为 ch
void 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");
    }
}

//左上角坐标、右下角坐标、用row填充行、用col填充列
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 退出游戏。";
}

//在[a, b)之间产生一个随机整数
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;
}
*/


/*================== the Game Class ==================*/

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;
}

/*================== the main function ==================*/
int main()
{
    //游戏准备
    srand((int)time(0));    //随机种子
    HideCursor();    //隐藏光标

    Game game;
    int a = drawMenu();
    if(a == 2)
        game.rank = 20;
    system("cls");
    drawPlaying();
    game.Playing();
}

好玩!!!

4.烧脑的迷宫,反正我没过关

#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
using namespace std;
const long long n=29,jg=25;
string p=" *!|-=.<^>1234567890@$%?&_~";
long long r=1;
char f='y';
void print(string a[n])
{
    system("cls");
    for(long long i=0;i<n;i++)
    cout<<a[i]<<endl;
}
void tc()
{
	system("cls");
	cout<<"\n\n\n\n\n                    欢迎下次再玩,拜拜!!!\n";
	cout<<"                    制作:饼干\n";
	cout<<"                  (按空格结束)";
	long long ok='\0';
	while(ok=getch(),ok!=' ');
	system("cls");
	return ;
}
void hf()
{
	char t='\0';
	while(t!=' ')
	{
		system("cls");
		cout<<"\n\n\n\n	    			   	A D键换皮肤    空格确定\n\n";
		cout<<"\n\n\n\n						  "<<p[r]<<"\n";
		t=getch();
		if(t=='a')r--;
		else
		if(t=='d')r++;
		if(r<1)r=jg;
		if(r>jg)r=1;
	}
	system("cls");
	return ;
}
void sm()
{
	system("cls");
	cout<<"\n\n		说明:\n\n\n";
	cout<<"					按空格开始游戏后\n";
	cout<<"					  W\n";
	cout<<"					A S D\n";
	cout<<"					移动\n";
	cout<<"			   		按R键返回起点\n";
	cout<<"			   		按P键返回主界面\n";
	cout<<"			   		按Q键设立传送点\n";
	cout<<"			   		按E键返回传送点\n";
	cout<<"			   		+号处为终点\n\n\n";
	cout<<"			按空格继续···";
	long long ok='\0';
	while(ok=getch(),ok!=' ');
	system("cls");
	return ;
}
int main()
{
	while(1)
	{
		long long xx=1,yy=1;
		system("cls");
		f='y';
		cout<<"\n\n\n\n\n\n\n\n\n\n\n";
		cout<<"                                                      迷宫游戏\n";
		cout<<"                                                   按空格开始游戏\n";
		cout<<"						    按0退出游戏\n";
		cout<<"						    按1换皮肤\n";
		cout<<"						    按2游戏说明\n";
		cout<<"\n\n\n\n\n\n\n";
		cout<<"                                                     制作:孙大帅哥";
		long long ok=getch();
		while(ok!='0'&&ok!='1'&&ok!='2'&&ok!=' ')ok=getch();
		switch(ok)
		{
			case ' ':
				break;
			case '0':
				tc();
				return 0;
				break;
			case '1':
				hf();
				f='n';
				break;
			case '2':
				sm();
				f='n';
				break;
		}
		while(f=='y')
		{
			system("cls");
			string a[n];
		    long long x,y,qx,qy;
		    long long ch;
			srand(time(0));
			long long s=rand()%6+1;
			switch(s)
			{
				case 1:
					qx=1;
					qy=1;
					a[0]="###########";
		    	    a[1]="#   #   # #";
		    	    a[2]="# #   #   #";
					a[3]="# ##### ###";
					a[4]="# #   ###+#";
					a[5]="#   #     #";
					a[6]="###########";
		    		break;
		    	case 2:
					qx=8;
					qy=12;
					a[0]="####################";
					a[1]="#+   #       #     #";
					a[2]="# ##   #### ###  # #";
					a[3]="#  ####      ##### #";
					a[4]="###   # # ##       #";
					a[5]="##### ########## # #";
					a[6]="#     ## ###   ##  #";
					a[7]="## ###   ### # ## ##";
					a[8]="#      #     #     #";
					a[9]="####################";
					break;
				case 3:
					qx=1;
					qy=1;
					a[0]="###################";
					a[1]="# #   #   #   #   #";
					a[2]="# # # # # # # # # #";
					a[3]="# # # # # # # # # #";
					a[4]="# # # # # # # # # #";
					a[5]="# # # # # # # # # #";
					a[6]="# # # # # # # # # #";
					a[7]="# # # # # # # # # #";
					a[8]="# # # # # # # # # #";
					a[9]="# # # # # # # # # #";
				   a[10]="#   #   #   #   #+#";
				   a[11]="####################";
					break;
				case 4:
					qx=1;
					qy=1;
					a[0]="########################################";
					a[1]="#                                      #";
					a[2]="# #################################### #";
					a[3]="# #                                  # #";
					a[4]="# # ###################### ##### #######";
					a[5]="# # #+        #     #    # ###         #";
					a[6]="# # # # # ######### # #### ##  #### ## #";
					a[7]="# # # # # ##        #      ## ##  #  # #";
					a[8]="# # # ### ## # # ########### ##  ##  # #";
					a[9]="# # # # #    # # # #        #    #   # #";
				   a[10]="# # ### ###### ### # ######## ##### ## #";
				   a[11]="# # # #            #              #  # #";
				   a[12]="# # # ######## ############## #####  # #";
				   a[13]="# # #                                # #";
				   a[14]="# # ################################## #";
				   a[15]="# #                                  # #";
				   a[16]="# #################################### #";
				   a[17]="#                                      #";
				   a[18]="########################################";
				    break;
				case 5:
					qx=1;
					qy=1;
					a[0]="########################################";
					a[1]="#                      #               #";
					a[2]="# ########### ################# ###### #";
					a[3]="# #         # #               # ##   # #";
					a[4]="# # # #### ## # ## # #### ##### ## # # #";
					a[5]="# # # #       #  # #    #        # # # #";
					a[6]="# # #  #### ###### ############### #   #";
					a[7]="# # ##    #      # #               # # #";
					a[8]="# #  #### ######## ################# # #";
					a[9]="# ##    #      # # #       #####   # # #";
				   a[10]="#   ########## #   #       #     ### # #";
				   a[11]="###     #        # #       # ##### # # #";
				   a[12]="#   ######################## #     # # #";
				   a[13]="# # #                        # ## #  ###";
				   a[14]="# ### #### ####### ########### #### ## #";
				   a[15]="#     #    #                      #   +#";
				   a[16]="########################################";
					break;
				case 6:
					qx=1;
					qy=1;
					a[0]="##################################################################################################################";
					a[1]="#                                                                                                                #";
					a[2]="# # ############################################################################################################ #";
					a[3]="# #  ###       #############                                                                           ###       #";
					a[4]="# ##  ## ######           +# ######################################################################### # # ### # #";
					a[5]="# ###  # ################### # # # # #                                                               # # # #   # #";
					a[6]="# ####           #                     ############################################################# # #   # # # #";
					a[7]="# #####################################         ##################                               ##  # ##### # # #";
					a[8]="# ######                                # #####   ##########       + ########################### ## ##       # # #";
					a[9]="# #      ######### ############## ###### #     ##          # #####################     ############  ######### # #";
				   a[10]="# # #####        # ######       #        # #######  ######## #                     ###                       # # #";
				   a[11]="# #     # ###### # ####   ##### ##########       # #         # ##### ##############   ###################### # ###";
				   a[12]="# ##### # #   ## # #### ##            #    ##### ############# #######              #     #                  # # #";
				   a[13]="# #   # #   # ## # ##   #  ############ ## #   # #        #            ############# ###### ################ # # #";
				   a[14]="# # # # ##### ## # ## ##  #   #   #   # ##   # # # ###### # ######### #              #############  ######## ### #";
				   a[15]="# # # #       ## # #  #     #   #   #   #####  #       #  # #         ###############             #            # #";
				   a[16]="# ### ########## # # #################################### # #####################################  ############# #";
				   a[17]="# #              #       ##                               #                                   ####               #";
				   a[18]="# # ####################### ################################################################# ################## #";
				   a[19]="#                         #  #                                                                                  +#";
				   a[20]="##################################################################################################################";
					break;
			}
			xx=x=qx,yy=y=qy;
			a[x][y]=p[r];
		    print(a);
		    while(a[x][y]!='+')
		    {
		        ch=getch();
		        if(ch=='q')
		        {
		        	xx=x;
		        	yy=y;
				}
				if(ch=='e')
				{
					a[x][y]=' ';
					a[xx][yy]=p[r];
					x=xx;
					y=yy;
				}
		        if(ch=='r')
		        {
		        	a[x][y]=' ';
		        	a[qx][qy]=p[r];
		        	x=qx;
		        	y=qy;
				}
		        if(ch=='p')
		        {
		        	f='n';
		        	break;
				}
		        if((ch=='a'&&a[x][y-1]=='+')||(ch=='d'&&a[x][y+1]=='+')||(ch=='s'&&a[x+1][y]=='+')||(ch=='w'&&a[x-1][y]=='+'))
		        {
		        	break;
				}
		        if(ch==27)break;
		        if(ch==97&&a[x][y-1]==' '||a[x][y-1]=='|')
				{
		            a[x][y]=' ';
		            y--;
		            a[x][y]=p[r];
		        }
		        if(ch==100&&a[x][y+1]==' '||a[x][y+1]=='|')
				{
		            a[x][y]=' ';
		            y++;
		            a[x][y]=p[r];
		        }
		        if(ch==115&&a[x+1][y]==' '||a[x+1][y]=='|')
				{
		            a[x][y]=' ';
		            x++;
		            a[x][y]=p[r];
		        }
		        if(ch==119&&a[x-1][y]==' '||a[x-1][y]=='|')
				{
		            a[x][y]=' ';
		            x--;
		            a[x][y]=p[r];
		        }
		        print(a);
		    }
		    system("cls");
		    if(f=='n')break;
		    cout<<"you win!!!"<<endl;
		    cout<<"按空格继续···";
		    ok='\0';
		    while(ok=getch(),ok!=' ');
			system("cls");
		    cout<<"是否继续(y/n)";
		    while(f=getch(),f!='y'&&f!='n');
		}
	}
    return 0;
}

谁过了告我

怎么样,收获满满吧!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值