问题标题: 重金悬赏游戏代码,要和蒋志航的不一样的。

0
3
已解决
黄俊博
黄俊博
资深光能
资深光能

一定要没毒的,谢谢,越多越好,C++的

黄俊博在2018-02-08 14:30:06追加了内容

@蒋智航 

@游戏大佬

黄俊博在2018-02-08 20:41:25追加了内容

@蒋智航 

@张睿杰 

@邵逸儒 


1
已采纳
蒋智航
蒋智航
高级天翼
高级天翼
#include <iostream>

#include <list>

#include <cstdio>

#include <string>

#include <vector>

#include <ctime>

#include <algorithm>

#include <conio.h>

#include <windows.h>

using namespace std;



class Node { 

public:

    int x, y;

    Node(int x1, int y1); 

};



class UserData { 

public:

    string name;

    long long score;

    int gt;

    int gr; 

    UserData(string s, long long sc,int gametime,int grade); 

    friend bool operator < (UserData a, UserData b); 

};



#define RIGHT 0x4d

#define LEFT 0x4b  

#define UP 0x48  

#define DOWN 0x50 

#define YELLOW FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY

#define CYAN FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY

#define ORANGE FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY

#define PURPLE FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY

#define RED  FOREGROUND_RED | FOREGROUND_INTENSITY

const int STARTX = 8; 

const int STARTY = 4; 

const int RANGEX = 60; 

const int RANGEY = 20;

int point=10; 

const int ENDX = STARTX + RANGEX; 

const int ENDY = STARTY + RANGEY; 

bool isSnake[RANGEY + 10 ][RANGEX + 10];

int speed; 

int sysj;

int gametime;

list<Node> snake;

int curDiraction; //蛇的当前前进方向, 1上, 2下, 3左, 4右

int score; //当前分数

int grade;

int snakeLen; //蛇的长度

int foodx, foody; //食物坐标

int gox, goy; //蛇头坐标

int mj;

void GoTo(short x, short y); //定位光标

void DrawBoard(); //绘制边框

void ShowInformation(); //展示游戏信息

void Init(); //初始化游戏

void RunSnake(int x, int y); //绘制蛇身

void Try(int& x, int& y); //试走

bool IsGoodCoord(int x, int y); //前进坐标是否合法

void AddFood(); //增加食物

void EartFood(); //吃食物

void InitSnake(); //初始化蛇身

bool EndGame(); //结束游戏

bool StartGame(); //启动游戏

bool GameMenu(); //游戏菜单

void ShowRanking(); //排行榜

void ShowAbout(); //相关信息

void InputData(); //输入玩家名字



int main() {

    system("title 贪吃蛇小游戏 by 李凯昱");

    while (true) {

        if (!GameMenu()) return 0;

    }

    return 0;

}



Node::Node(int x1, int y1) { //构造Node对象

    x = x1; y = y1; 

}



bool operator < (UserData a, UserData b) { //重载运算符,按分数由大到小排列

    if(a.score != b.score)

    return a.score > b.score;

    if(a.gt !=b.gt)

    return a.gt > b.gt;

    else

    return a.gr > b.gr;

}

UserData::UserData(string s, long long sc,int gametime_,int _grade) { //构造UserData对象

    name = s; score = sc; gt=gametime_; gr=_grade;

}



void color(WORD A)

{

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), A);

} 



void Color(int score_)

{

    if(score_%4==1)

    {

        color(PURPLE);

    }

    else if(score_%4==2)

    {

        color(RED);

    }

    else if(score_%4==3)

    {

        color(YELLOW);

    }

    else if(score_%4==0) 

    {

        color(CYAN);

    }

}



void GoTo(short x, short y) { //定位光标

    COORD coord = { x, y };

    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);

}



void ShowInformation() { //输出游戏信息

    color(YELLOW);

    GoTo(78, 5);

    printf("贪吃蛇游戏");

    GoTo(78,18);

    gametime=(clock()-mj)/1000;

    grade=snakeLen-3; 

    printf("生存时间:%3d 秒",(clock()-mj)/1000);

    GoTo(78, 8);

    printf("游戏规则:");

    GoTo(78, 10);

    printf("请按 ↑ ↓ ← →  来控制您的蛇吃东西");

    GoTo(78, 12);

    printf("吃的越多,蛇就越长,您的等级也将越高");

    GoTo(78, 14);

    printf("当蛇吃到自己或撞上墙时,游戏结束。");

    GoTo(78,16);

    printf("自动前进时间:%3dms",speed);

    GoTo(78, 20);

    printf("当前等级: %8d", snakeLen-3);

    GoTo(78, 23);

    printf("您的分数: %d", score);

    color(CYAN);

    printf("+%d=%d",score/3,score*3/2);

    color(YELLOW);

    GoTo(78,25);

    printf("剩余时间:%d秒",10+(snakeLen-3)*4-gametime);

    sysj=10+(snakeLen-3)*4-gametime; 

}



void DrawBoard() { //绘制墙体



    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); //获得输出句柄



    CONSOLE_CURSOR_INFO cursor_info = { 1, 0 }; //光标信息

    SetConsoleCursorInfo(hOut, &cursor_info); //隐藏光标



    COORD size = { 120, 30 };

    SetConsoleScreenBufferSize(hOut, size); //重设缓冲区大小



    SMALL_RECT rc = { 0 , 0, 120, 30 };

    SetConsoleWindowInfo(hOut, true, &rc); //重设窗口大小



    SetConsoleTextAttribute(hOut, CYAN);



    for (int i = STARTX - 2; i <= ENDX + 2; i += 2) { //横向墙体

        GoTo(i, STARTY - 1);

        printf("■");

        GoTo(i, ENDY + 1);

        printf("■");

    }

    for (int i = STARTY - 1; i <= ENDY + 1; ++i) { //竖向墙体

        GoTo(STARTX - 2, i);

        printf("■");

        GoTo(ENDX + 2, i);

        printf("■");

    }

}

void draw()

{

    char m=snakeLen+62;

    Color(score);

    cout<<"■";

 } 

void Init() { //初始化游戏

    system("cls");

    memset(isSnake, 0, sizeof(isSnake));

    speed = 200;

    curDiraction = 4;

    score = 0;

    DrawBoard();

    InitSnake();

    ShowInformation();

    AddFood();

    mj=clock();

    point=10;

    sysj=10;

}



void RunSnake(int x, int y) { //绘制蛇身

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);

    score += snakeLen + 1;

    if (x == foodx && y == foody) {

        EartFood();

        AddFood();

        return;

    }

    snake.push_front(Node(x, y));

    isSnake[y][x] = true;

    GoTo(x, y);

    draw();

    Node back = snake.back();

    snake.pop_back();

    isSnake[back.y][back.x] = false;

    GoTo(back.x, back.y);

    printf(" ");

}



void Try(int& x, int& y) { //试走

    int key, cnt = 100;

    while (cnt--) { //多次检测键盘状态

        if (_kbhit()) {

            key = getch();

            switch (key) {

            case UP: 

                if (curDiraction == 1 || curDiraction == 2) break;

                --y; curDiraction = 1; return;

            case DOWN: 

                if (curDiraction == 1 || curDiraction == 2) break;

                ++y; curDiraction = 2; return;

            case LEFT: 

                if (curDiraction == 3 || curDiraction == 4) break;

                x -= 2; curDiraction = 3; return;

            case RIGHT: 

                if (curDiraction == 3 || curDiraction == 4) break;

                x += 2; curDiraction = 4; return;

            }

        }

    }

    if (curDiraction == 1) --y; //用户没有输入时

    else if (curDiraction == 2) ++y;

    else if (curDiraction == 3) x -= 2;

    else x += 2;

}



bool IsGoodCoord(int x, int y) { //判断光标是否合法

    if (x <= ENDX && y <= ENDY && x >= STARTX && y >= STARTY)

        return true;

    else

        return false;

}



void AddFood() { //增加食物

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), PURPLE);

    srand((unsigned)time(NULL));

    while (true) {

        foodx = (rand()%ENDX) + 1;

        foody = (rand()%ENDY) + 1;

        if (foodx&1) foodx++;

        if (!isSnake[foody][foodx] && IsGoodCoord(foodx, foody)) break;

    }

    GoTo(foodx, foody);

    int a=rand()%5;

    if(a>=4) 

    printf("★");

    else if(a<=1) 

    printf("○");

    else

    printf("▲");

}



void EartFood() { //吃东西

    point+=4;

    int sb=gametime=(clock()-mj)/1000;

    sysj=point-sb;

    score+=score/2;

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);

    snake.push_front(Node(foodx, foody));

    isSnake[foody][foodx] = true;

    ++snakeLen;

    if (speed >= 55) speed -= 5;



    GoTo(foodx, foody);

    draw();

    AddFood(); 

}



void InitSnake() { //初始化蛇身

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);

    snakeLen = 3, gox = 18, goy = 14;

    snake.clear();

    snake.push_front(Node(12, 14));

    snake.push_front(Node(14, 14));

    snake.push_front(Node(16, 14));

    for (int i = 12; i <= 16; i += 2) {

        GoTo(i, 14);

        draw();

        isSnake[14][i] = true;

    }

}

bool EndGame() { //结束游戏

    system("cls");

    DrawBoard();

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);

    GoTo(28, 10);

    printf("您的本局游戏得分: %d分", score);

    GoTo(32, 18);

    printf("....你挂了....");

    GoTo(27, 20);

    printf("是否继续游戏: 是(1), 否(0)");

    GoTo(27, 22);

    char key = getch();

    while (true) {

        if (key == '1') return false;

        else if (key == '0') 

        {GoTo(ENDX+1,ENDY+2);

        exit(0);return true;

        }

        else key = getch();

    }

}



bool StartGame() { //启动游戏



    Init();



    while (IsGoodCoord(gox, goy) && !isSnake[goy][gox]&&sysj>0) { //当试走合法时

        RunSnake(gox, goy);

        ShowInformation();

        Try(gox, goy);

        Sleep(speed);

    }

    InputData(); 

    return true;

}



bool GameMenu() { //游戏菜单

    system("cls");

    DrawBoard();

    GoTo(STARTX + 22, STARTY + 4);

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);

    printf("欢迎进入贪吃蛇游戏!");

    GoTo(STARTX + 24, STARTY + 10);

    printf("1: 新游戏");

    GoTo(STARTX + 24, STARTY + 12);

    printf("2: 排行榜");

    GoTo(STARTX + 24, STARTY + 14);

    printf("3: 关于游戏");

    GoTo(STARTX + 24, STARTY + 16);

    printf("4: 退出游戏");



    while (true) {

        if (_kbhit()) {

            char key = getch();

            switch (key) {

            case '1':

                if (!StartGame()) return false; 

                else return true;

            case '2':

                ShowRanking(); return true;

            case '3':

                ShowAbout(); return true;

            case '4':

                GoTo(1,ENDY+2);

                return false;

            default:

                return true;

            }

        }

    }

}



void ShowRanking() { //展示排行榜

    vector<UserData> vu;

    FILE *fp = fopen("GameData.txt", "r");

    if (fp == NULL) fp = fopen("GameData.txt", "w+");

    char name[20];

    int len = 0;

    while (fscanf(fp, "%s", name) != EOF) {

        ++len;

        int score,g=grade;

        fscanf(fp, "%d%d%d%*c", &score,&gametime,&g);

        vu.push_back(UserData(string(name), score,gametime,grade));

    }

    fclose(fp);

    sort(vu.begin(), vu.end()); //对得分进行排名

    system("cls");

    DrawBoard();

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), CYAN);

    GoTo(STARTX + 8, STARTY + 2);

    printf("用户");

    GoTo(STARTX + 20, STARTY + 2);

    printf("分数");

    GoTo(STARTX + 32, STARTY + 2);

    printf("生存时间");

    GoTo(STARTX + 44, STARTY + 2);

    printf("排行");

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);



    for (int i = 0; i < len && i < 10; ++i) { //打印前十名用户数据

        char const *p = vu[i].name.c_str();

        Color(vu[i].score);

        GoTo(STARTX + 8, STARTY + 4 + i);

        printf("%s", p);

        GoTo(STARTX + 20, STARTY + 4 + i);

        printf("%d分", vu[i].score);

        GoTo(STARTX + 32, STARTY + 4 + i);

        printf("%d秒", vu[i].gt);

        GoTo(STARTX + 44, STARTY + 4 + i);

        printf(" %d", i + 1);

    }



    GoTo(STARTX + 4, ENDY - 2);

    printf("-----------------  按'1'返回游戏菜单  ---------------");

    while (true) {

        if (_kbhit()) {

            char key = getch();

            if (key == '1') break;

        }

    }

}



void ShowAbout() { //展示游戏相关

    system("cls");

    DrawBoard();

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);



    GoTo(STARTX + 4, STARTY + 2);

    printf("-------------------  贪吃蛇游戏  -------------------");

    GoTo(STARTX + 10, STARTY + 4);

    printf("制作人: ");

    GoTo(STARTX + 10, STARTY + 6);

    printf("李凯昱");

    GoTo(STARTX + 10,STARTY + 8);

    printf("贪吃蛇游戏");

    GoTo(STARTX + 10,STARTY + 10);

    printf("游戏规则:");

    GoTo(STARTX + 10,STARTY + 12);

    printf("请按 ↑ ↓ ← →  来控制您的蛇吃东西");

    GoTo(STARTX + 10,STARTY + 14);

    printf("吃的越多,蛇就越长,您的等级也将越高");

    GoTo(STARTX + 10,STARTY + 16);

    printf("当蛇吃到自己或撞上墙时,游戏结束。");



    GoTo(STARTX + 4, ENDY - 2);

    printf("-----------------  按'1'返回游戏菜单  ---------------");

    while (true) {

        if (_kbhit()) {

            char key = getch();

            if (key == '1') break;

        }

    }

}



void InputData() { //用户输入名字

    char name[20];

    if(score>=1000)

    {

    GoTo(STARTX + 10, STARTY + 10);

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), RED);

    printf("请输入你的名字: ");

    COORD coord = { STARTX + 10, STARTY + 12 };

    SetConsoleCursorPosition(GetStdHandle(STD_INPUT_HANDLE), coord);

    while (true) { //忽略非法字符

        scanf("%s", name);

        if (name[0] != 0 && name[0] != ' ') break; 

    }FILE *fp = fopen("Gamedata.txt", "a");

    if (fp == NULL) fp = fopen("GameData.txt", "w+");

    fprintf(fp, "%s %d %d \n", name, score,gametime);

    fclose(fp);

    }

    else 

    {

        GoTo(STARTX + 20, STARTY + 10);

        cout<<"哟!这分数也能上榜??"<<endl; 

        Sleep(1000);

     }  

    EndGame(); 



}

 

1
蒋智航
蒋智航
高级天翼
高级天翼
#include<iostream>

#include<windows.h>

#include<time.h>

#include<conio.h>

using namespace std;

// 刷新当前屏幕

inline void Refresh(char q[][22], int grade, int gamespeed){

    system("cls");     //  清屏a

 int i,j;

 cout << endl;

 for(i=0;i<22;i++){

     cout << "\t";

  for(j=0;j<22;j++)

   cout<<q[i][j]<<' ';    //  输出贪吃蛇棋盘

        if(i==0) cout << "\t等级为:" << grade;

        if(i==4) cout << "\t自动前进时间";

        if(i==6) cout << "\t间隔为:" << gamespeed << "ms";

  cout<<endl;

 }

}

int main(){

    char tcsQipan[22][22];     //  贪吃蛇棋盘是一个二维数组(如22*22,包括墙壁)

    int i,j;

    for(i=1;i<=20;i++)

        for(j=1;j<=20;j++)

            tcsQipan[i][j]=' ';     //     初始化贪吃蛇棋盘中间空白部分

    for(i=0;i<=21;i++)

        tcsQipan[0][i] = tcsQipan[21][i] = '-';      //初始化贪吃蛇棋盘上下墙壁

    for(i=1;i<=20;i++)

        tcsQipan[i][0] = tcsQipan[i][21] = '|';      //初始化贪吃蛇棋盘左右墙壁

    int tcsZuobiao[2][100];     //蛇的坐标数组

    for(i=0; i<4; i++){

        tcsZuobiao[0][i] = 1;

        tcsZuobiao[1][i] = i + 1;

    }

    int head = 3,tail = 0;

    for(i=1;i<=3;i++)

        tcsQipan[1][i]='*';    //蛇身

    tcsQipan[1][4]='#';       //蛇头

    int x1, y1;           // 随机出米

    srand(time(0));

    do{

  x1=rand()%20+1;

  y1=rand()%20+1;

 }while(tcsQipan[x1][y1]!=' ');

 tcsQipan[x1][y1]='*';

 cout<<"\n\n\t\t贪吃蛇游戏即将开始 !"<<endl;//准备开始;;

 long start;

    int grade = 1, length = 4;

    int gamespeed = 500;  //前进时间间隔

 for(i=3;i>=0;i--){

  start=clock();

  while(clock()-start<=1000);

  system("cls");

  if(i>0)

   cout << "\n\n\t\t进入倒计时:" << i << endl;

  else

   Refresh(tcsQipan,grade,gamespeed);

 }

    int timeover;

    char direction = 77;  // 初始情况下,向右运动

    int x,y;

    while(1){

        timeover = 1;

        start = clock();

        while((timeover=(clock()-start<=gamespeed))&&!kbhit());

             //如果有键按下或时间超过自动前进时间间隔则终止循环

        if(timeover){

            getch();direction = getch();

        }

        switch(direction){

        case 72: x= tcsZuobiao[0][head]-1; y= tcsZuobiao[1][head];break;     // 向上

        case 80: x= tcsZuobiao[0][head]+1; y= tcsZuobiao[1][head];break;      // 向下

        case 75: x= tcsZuobiao[0][head]; y= tcsZuobiao[1][head]-1;break;      // 向左

        case 77: x= tcsZuobiao[0][head]; y= tcsZuobiao[1][head]+1;           // 向右

        }

        if(!(direction==72||direction==80||direction==75 ||direction==77)){   //  按键非方向键

            cout << "\tGame over!" << endl;return 0;

        }

        if(x==0 || x==21 ||y==0 || y==21){   // 碰到墙壁

            cout << "\tGame over!" << endl;return 0;

        }

        if(tcsQipan[x][y]!=' '&&!(x==x1&&y==y1)){ //   蛇头碰到蛇身

            cout << "\tGame over!" << endl;return 0;

        }

        if(x==x1 && y==y1){      //  吃米,长度加1

            length ++;

            if(length>=8){

                length -= 8;

                grade ++;

                if(gamespeed>=200)

                    gamespeed = 550 - grade * 50; // 改变自动前进时间间隔

            }

            tcsQipan[x][y]= '#';

            tcsQipan[tcsZuobiao[0][head]][tcsZuobiao[1][head]] = '*';

            head = (head+1)%100;

            tcsZuobiao[0][head] = x;

            tcsZuobiao[1][head] = y;

            do

            {

                x1=rand()%20+1;

                y1=rand()%20+1;

            }while(tcsQipan[x1][y1]!=' ');

            tcsQipan[x1][y1]='*';

            Refresh(tcsQipan,grade,gamespeed);

        }



        else{       //  不吃米

            tcsQipan [tcsZuobiao[0][tail]][tcsZuobiao[1][tail]]=' ';

            tail=(tail+1)%100;

            tcsQipan [tcsZuobiao[0][head]][tcsZuobiao[1][head]]='*';

            head=(head+1)%100;

            tcsZuobiao[0][head]=x;

            tcsZuobiao[1][head]=y;

            tcsQipan[tcsZuobiao[0][head]][tcsZuobiao[1][head]]='#';

            Refresh(tcsQipan,grade,gamespeed);

        }

    }

    return 0;

}

 

1
蒋智航
蒋智航
高级天翼
高级天翼
#include <windows.h>  
#include <stdlib.h>  
#include <conio.h>  
#include <time.h>  
#include <cstring>  
#include <cstdio>  
#include <iostream>  
#define  N 22  
using namespace std;  

    int gameover;  

    int x1, y1; // 随机出米  

    int x,y;  

    long start;  

//=======================================  
//类的实现与应用initialize  a
//=======================================  

//下面定义贪吃蛇的坐标类  
class snake_position  
{  
public:  

    int x,y;      //x表示行,y表示列  

    snake_position(){};  

    void initialize(int &);//坐标初始化  


};  

snake_position position[(N-2)*(N-2)+1]; //定义贪吃蛇坐标类数组,有(N-2)*(N-2)个坐标  

void snake_position::initialize(int &j)  
{  
        x = 1;  

        y = j;  
}  


//下面定义贪吃蛇的棋盘图  

class snake_map  
{  

private:  

    char s[N][N];//定义贪吃蛇棋盘,包括墙壁。  

    int grade, length;  

    int gamespeed; //前进时间间隔  

    char direction; // 初始情况下,向右运动  

    int head,tail;  

    int score;  

    bool gameauto;  

public:  

    snake_map(int h=4,int t=1,int l=4,char d=77,int s=0):length(l),direction(d),head(h),tail(t),score(s){}  

    void initialize();   //初始化函数  

    void show_game();  

    int updata_game();  

    void setpoint();  

    void getgrade();  

    void display();  


};  

//定义初始化函数,将贪吃蛇的棋盘图进行初始化  

void snake_map::initialize()  
{  
    int i,j;  

    for(i=1;i<=3;i++)  

        s[1][i] = '*';  

    s[1][4] = '#';  

    for(i=1;i<=N-2;i++)  

        for(j=1;j<=N-2;j++)  

            s[i][j]=' '; // 初始化贪吃蛇棋盘中间空白部分  

    for(i=0;i<=N-1;i++)  

        s[0][i] = s[N-1][i] = '-'; //初始化贪吃蛇棋盘上下墙壁  

    for(i=1;i<=N-2;i++)  

        s[i][0] = s[i][N-1] = '|'; //初始化贪吃蛇棋盘左右墙壁  
}  


//============================================  
//输出贪吃蛇棋盘信息  

void snake_map::show_game()  

{  

    system("cls"); // 清屏  

    int i,j;  

    cout << endl;  

    for(i=0;i<N;i++)  
    {  

        cout << '\t';  

        for(j=0;j<N;j++)  

            cout<<s[i][j]<<' '; // 输出贪吃蛇棋盘  

        if(i==2) cout << "\t等级:" << grade;  

        if(i==6) cout << "\t速度:" << gamespeed;  

        if(i==10) cout << "\t得分:" << score << "分" ;  

        if(i==14) cout << "\t暂停:按一下空格键" ;  

        if(i==18) cout << "\t继续:按两下空格键" ;  

        cout<<endl;  
    }  
}  

//输入选择等级  
void snake_map::getgrade()  
{  
    cin>>grade;  

    while( grade>7 || grade<1 )  
    {  
        cout << "请输入数字1-7选择等级,输入其他数字无效" << endl;  

        cin >> grade;  
    }  
    switch(grade)  
    {  
        case 1: gamespeed = 1000;gameauto = 0;break;  

        case 2: gamespeed = 800;gameauto = 0;break;  

        case 3: gamespeed = 600;gameauto = 0;break;  

        case 4: gamespeed = 400;gameauto = 0;break;  

        case 5: gamespeed = 200;gameauto = 0;break;  

        case 6: gamespeed = 100;gameauto = 0;break;  

        case 7: grade = 1;gamespeed = 1000;gameauto = 1;break;  

    }  

}  

//输出等级,得分情况以及称号  

void snake_map::display()  
{  

    cout << "\n\t\t\t\t等级:" << grade;  

    cout << "\n\n\n\t\t\t\t速度:" << gamespeed;  

    cout << "\n\n\n\t\t\t\t得分:" << score << "分" ;  

}  

//随机产生米  
void snake_map::setpoint()  
{  
    srand(time(0));  

    do  
    {  

        x1 = rand() % (N-2) + 1;  

        y1 = rand() % (N-2) + 1;  

    }while(s[x1][y1]!=' ');  

    s[x1][y1]='*';  
}  

char key;  

int snake_map::updata_game()  
{  
    gameover = 1;  

    key = direction;  

    start = clock();  

    while((gameover=(clock()-start<=gamespeed))&&!kbhit());  

    //如果有键按下或时间超过自动前进时间间隔则终止循环  



        if(gameover)  
        {  

            getch();  

            key = getch();  
        }  

        if(key == ' ')  

        {  
            while(getch()!=' '){};//这里实现的是按空格键暂停,按空格键继续的功能,但不知为何原因,需要按两下空格才能继续。这是个bug。  
        }  

        else  

            direction = key;  

        switch(direction)  
        {  
            case 72: x= position[head].x-1; y= position[head].y;break; // 向上  

            case 80: x= position[head].x+1; y= position[head].y;break; // 向下  

            case 75: x= position[head].x; y= position[head].y-1;break; // 向左  

            case 77: x= position[head].x; y= position[head].y+1; // 向右  

        }  

        if(!(direction==72||direction==80||direction==75 ||direction==77))   // 按键非方向键  

            gameover = 0;  

        else if(x==0 || x==N-1 ||y==0 || y==N-1)   // 碰到墙壁  

            gameover = 0;  

        else if(s[x][y]!=' '&&!(x==x1&&y==y1))    // 蛇头碰到蛇身  

            gameover = 0;  

        else if(x==x1 && y==y1)  

        { // 吃米,长度加1  

            length ++;  

            if(length>=8 && gameauto)  

            {  

                length -= 8;  

                grade ++;  

                if(gamespeed>=200)  

                    gamespeed -= 200; // 改变贪吃蛇前进速度  

                else  

                    gamespeed = 100;  

            }  

            s[x][y]= '#';  //更新蛇头  

            s[position[head].x][position[head].y] = '*'; //吃米后将原先蛇头变为蛇身  

            head = (head+1) % ( (N-2)*(N-2) );   //取蛇头坐标  

            position[head].x = x;  

            position[head].y = y;  

            show_game();  

            gameover = 1;  

            score += grade*20;  //加分  

            setpoint();   //产生米  

        }  

        else  
        { // 不吃米  

            s[position[tail].x][position[tail].y]=' ';//将蛇尾置空  

            tail= (tail+1) % ( (N-2) * (N-2) );//更新蛇尾坐标  

            s[position[head].x][position[head].y]='*';  //将蛇头更为蛇身  

            head= (head+1) % ( (N-2) * (N-2) );  

            position[head].x = x;  

            position[head].y = y;  

            s[position[head].x][position[head].y]='#'; //更新蛇头  

            gameover = 1;  

        }  
    return gameover;  

}  
//====================================  
//主函数部分  
//====================================  
int main()  
{  
    char ctn = 'y';  

    int nodead;  

    cout<<"\n\n\n\n\n\t\t\t 欢迎进入贪吃蛇游戏!"<<endl;//欢迎界面;  

    cout<<"\n\n\n\t\t\t 按任意键马上开始。。。"<<endl;//准备开始;;  

    getch();  

    while( ctn=='y' )  
    {  
        system("cls"); // 清屏  

        snake_map snake;  

        snake.initialize();  

        cout << "\n\n请输入数字选择游戏等级:" << endl;  

        cout << "\n\n\n\t\t\t1.等级一:速度 1000 \n\n\t\t\t2.等级二:速度 800 \n\n\t\t\t3.等级三:速度 600 ";  

        cout << "\n\n\t\t\t4.等级四:速度 400 \n\n\t\t\t5.等级五:速度 200 \n\n\t\t\t6.等级六:速度 100 \n\n\t\t\t7.自动升级模式" << endl;  

        snake.getgrade();//获取等级  

        for(int i=1;i<=4;i++)  
        {  
            position[i].initialize(i);//初始化坐标  
        }  

        snake.setpoint();  // 产生第一个米  

        do  
        {  
            snake.show_game();  

            nodead = snake.updata_game();  

        }while(nodead);  

        system("cls"); //清屏  



        cout << "\n\n\n\t\t\t\tGameover!\n\n"<<endl;  

        snake.display();//输出等级/得分情况  

        cout << "\n\n\n\t\t    是否选择继续游戏?输入 y 继续,n 退出" << endl;  

        cin >> ctn;  

    }  

    return 0;  
}  

 

1
1
1
蒋智航
蒋智航
高级天翼
高级天翼
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <windows.h>
#include <conio.h>
#define KEY_UP    0xE048
#define KEY_DOWN  0xE050
#define KEY_LEFT  0xE04B
#define KEY_RIGHT 0xE04D
#define KEY_ESC   0x001B
#define KEY_1     '1'
#define KEY_2     '2'
#define KEY_3     '3'
#define GAME_MAX_WIDTH   100
#define GAME_MAX_HEIGHT  100
#define STR_GAMETITLE "ArrowKey:MoveCursor  1:打开  \
2:插旗子  3:OpenNeighbors"
#define STR_GAMEWIN   "Congratulations! You Win! Thank you for playing!\n"
#define STR_GAMEOVER  "Game Over, thank you for playing!\n"
#define STR_GAMEEND   "Presented by yzfy . Press ESC to exit\n"
class CConsoleWnd
{
    public:
        static int TextOut(const char*);
        static int GotoXY(int, int);
        static int CharOut(int, int, const int);
        static int TextOut(int, int, const char*);
        static int GetKey();
    public:
};

    int CConsoleWnd::GetKey()
    {
        int nkey=getch(),nk=0;
        if(nkey>=128||nkey==0)nk=getch();
        return nk>0?nkey*256+nk:nkey;
    }
    int CConsoleWnd::GotoXY(int x, int y)
    {
        COORD cd;
        cd.X = x;cd.Y = y;
        return SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),cd);
    }
    int CConsoleWnd::TextOut(const char* pstr)
    {
        for(;*pstr;++pstr)putchar(*pstr);
        return 0;
    }
    int CConsoleWnd::CharOut(int x, int y, const int pstr)
    {
        GotoXY(x, y);
        return putchar(pstr);
    }
    int CConsoleWnd::TextOut(int x, int y, const char* pstr)
    {
        GotoXY(x, y);
        return TextOut(pstr);
    }
class CSLGame:public CConsoleWnd
{
    private:
    private:
        int curX,curY;
        int poolWidth,poolHeight;
        int bm_gamepool[GAME_MAX_HEIGHT+2][GAME_MAX_WIDTH+2];
    public:
        CSLGame():curX(0),curY(0){poolWidth=poolHeight=0;}
        int InitPool(int, int, int);
        int MoveCursor(){return CConsoleWnd::GotoXY(curX, curY);}
        int DrawPool(int);
        int WaitMessage();
        int GetShowNum(int, int);
        int TryOpen(int, int);
    private:
        int DFSShowNum(int, int);
    private:
        const static int GMARK_BOOM;
        const static int GMARK_EMPTY;
        const static int GMARK_MARK;
};
const int CSLGame::GMARK_BOOM =  0x10;
const int CSLGame::GMARK_EMPTY=  0x100;
const int CSLGame::GMARK_MARK =  0x200;



    int CSLGame::InitPool(int Width, int Height, int nBoom)
    {
        poolWidth = Width; poolHeight = Height;
        if(nBoom<=0 || nBoom>=Width*Height
            || Width <=0 || Width >GAME_MAX_WIDTH
            || Height<=0 || Height>GAME_MAX_HEIGHT
        ){
            return 1;
        }
        for(int y=0; y<=Height+1; ++y)
        {
            for(int x=0; x<=Width+1; ++x)
            {
                bm_gamepool[y][x]=0;
            }
        }
        srand(time(NULL));
        while(nBoom)
        {
            int x = rand()%Width + 1, y = rand()%Height + 1;
            if(bm_gamepool[y][x]==0)
            {
                bm_gamepool[y][x] = GMARK_BOOM;
                --nBoom;
            }
        }
        curX = curY = 1;
        MoveCursor();
        return 0;
    }



    int CSLGame::DrawPool(int bDrawBoom = 0)
    {
        for(int y=1;y<=poolHeight;++y)
        {
            CConsoleWnd::GotoXY(1, y);
            for(int x=1;x<=poolWidth;++x)
            {
                if(bm_gamepool[y][x]==0)
                {
                    putchar('.');
                }
                else if(bm_gamepool[y][x]==GMARK_EMPTY)
                {
                    putchar(' ');
                }
                else if(bm_gamepool[y][x]>0 && bm_gamepool[y][x]<=8)
                {
                    putchar('0'+bm_gamepool[y][x]);
                }
                else if(bDrawBoom==0 && (bm_gamepool[y][x] & GMARK_MARK))
                {
                    putchar('#');
                }
                else if(bm_gamepool[y][x] & GMARK_BOOM)
                {
                    if(bDrawBoom)
                        putchar('*');
                    else
                        putchar('.');
                }
            }
        }
        return 0;
    }
    int CSLGame::GetShowNum(int x, int y)
    {
        int nCount = 0;
        for(int Y=-1;Y<=1;++Y)
            for(int X=-1;X<=1;++X)
        {
            if(bm_gamepool[y+Y][x+X] & GMARK_BOOM)++nCount;
        }
        return nCount;
    }
    int CSLGame::TryOpen(int x, int y)
    {
        int nRT = 0;
        if(bm_gamepool[y][x] & GMARK_BOOM)
        {
            nRT = EOF;
        }
        else
        {
            int nCount = GetShowNum(x,y);
            if(nCount==0)
            {
                DFSShowNum(x, y);
            }
            else bm_gamepool[y][x] = nCount;
        }
        return nRT;
    }
    int CSLGame::DFSShowNum(int x, int y)
    {
        if((0<x && x<=poolWidth) &&
            (0<y && y<=poolHeight) &&
            (bm_gamepool[y][x]==0))
        {
            int nCount = GetShowNum(x, y);
            if(nCount==0)
            {
                bm_gamepool[y][x] = GMARK_EMPTY;
                for(int Y=-1;Y<=1;++Y)
                    for(int X=-1;X<=1;++X)
                {
                    DFSShowNum(x+X,y+Y);
                }
            }
            else bm_gamepool[y][x] = nCount;
        }
        return 0;
    }
    int CSLGame::WaitMessage()
    {
        int nKey = CConsoleWnd::GetKey();
        int nRT = 0, nArrow = 0;
        switch (nKey)
        {
            case KEY_UP:
            {
                if(curY>1)--curY;
                nArrow=1;
            }break;
            case KEY_DOWN:
            {
                if(curY<poolHeight)++curY;
                nArrow=1;
            }break;
            case KEY_LEFT:
            {
                if(curX>1)--curX;
                nArrow=1;
            }break;
            case KEY_RIGHT:
            {
                if(curX<poolWidth)++curX;
                nArrow=1;
            }break;
            case KEY_1:
            {
                nRT = TryOpen(curX, curY);
            }break;
            case KEY_2:
            {
                if((bm_gamepool[curY][curX]
                    & ~(GMARK_MARK|GMARK_BOOM))==0)
                {
                    bm_gamepool[curY][curX] ^= GMARK_MARK;
                }
            }break;
            case KEY_3:
            {
                if(bm_gamepool[curY][curX] & 0xF)
                {
                    int nb = bm_gamepool[curY][curX] & 0xF;
                    for(int y=-1;y<=1;++y)
                        for(int x=-1;x<=1;++x)
                    {
                        if(bm_gamepool[curY+y][curX+x] & GMARK_MARK)
                            --nb;
                    }
                    if(nb==0)
                    {
                        for(int y=-1;y<=1;++y)
                            for(int x=-1;x<=1;++x)
                        {
                            if((bm_gamepool[curY+y][curX+x]
                                & (0xF|GMARK_MARK)) == 0)
                            {
                                nRT |= TryOpen(curX+x, curY+y);
                            }
                        }
                    }
                }
            }break;
            case KEY_ESC:
            {
                nRT = EOF;
            }break;
        }
        if(nKey == KEY_1 || nKey == KEY_3)
        {
            int y=1;
            for(;y<=poolHeight;++y)
            {
                int x=1;
                for(;x<=poolWidth; ++x)
                {
                    if(bm_gamepool[y][x]==0)break;
                }
                if(x<=poolWidth) break;
            }
            if(! (y<=poolHeight))
            {
                nRT = 1;
            }
        }
        if(nArrow==0)
        {
            DrawPool();
        }
        MoveCursor();
        return nRT;
    }
    int main(void)
    {
        int x=50, y=20, b=100,n; 
        CSLGame slGame;
        {
            CConsoleWnd::GotoXY(0,0);
            CConsoleWnd::TextOut(STR_GAMETITLE);
            slGame.InitPool(x,y,b);
            slGame.DrawPool();
            slGame.MoveCursor();
        }
        while((n=slGame.WaitMessage())==0) 
            ;
        {
            slGame.DrawPool(1);
            CConsoleWnd::TextOut("\n");
            if(n==1)
            {
                CConsoleWnd::TextOut(STR_GAMEWIN);
            }
            else
            {
                CConsoleWnd::TextOut(STR_GAMEOVER);
            }
            CConsoleWnd::TextOut(STR_GAMEEND);
        }
        while(CConsoleWnd::GetKey()!=KEY_ESC)
            ;
        return 0;
    }

 

1
1
蒋智航
蒋智航
高级天翼
高级天翼
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
struct player
    {
        char allname[20];
        int money,dangqian;
        int fangchan[5][19];
        char name;
        int hours;
        int days;
        int turns;
    }p1,p2;
int main(void)
{
    FILE *fp;
    int shijian(int a);
    int qipan(char weizhi[28]);
    int qianjin(int qianjinbs,int dangqian,char weizhi[28],char name);
    int houtui(int houtuibs,int dangqian,char weizhi[28],char name);
    int renpin(int money);
    int duchang(int money);
    int meiqian(int money);
    int houtuibs;
    int choice;
    int qianjinbs;
    int m,n,p,q;
    int a,b,c;
    char weizhi[28]="                          ";
    int fang(int turns);
    srand( (unsigned)time( NULL ) );
    p1.turns=1;
    p1.hours=0;
    p1.days=0;
    p1.dangqian=0;
    p2.dangqian=0;
    b=0;
    p1.money=5000;
    p2.money=5000;
    printf("欢迎来到大富翁的世界!!大富翁的世界有你更精彩!!!\n");
    printf("1.新的旅程\n2.旧的回忆\n");
    scanf("%d",&a);
    if (a==2)
    {
        printf("请输入存档时1p的名字:\n");
        getchar();
        gets(p1.allname);
        printf("%s", p1.allname);
        fp=fopen(p1.allname,"rb");
        fread(&p1,sizeof(struct player),1,fp);
        fread(&p2,sizeof(struct player),1,fp);
        fclose(fp);
        goto turn;
    }
    printf("输入1p的名字(注意首字母最好为英文):\n");
    scanf("%d",&a);
    gets(p1.allname);
    p1.name=1;
    printf("输入2P的名字(注意首字母最好为英文): \n");
    scanf("%d",&a);
    gets(p2.allname);
    p2.name=2;
    turn:
    if (p1.turns)
    {
        system("cls");
     weizhi[p1.dangqian]=1;
     weizhi[p2.dangqian]=2;
    qipan(weizhi);
    printf("第%d天\n",p1.days);
        if (p1.money<500)
    {
        printf("身份:贫民:   ");
    }
        else if (p1.money<10000)
    {
        printf("身份:平民:   ");
    }
    else if (p1.money<20000)
    {
        printf("身份:小资:   ");
    }
    else if (p1.money<50000)
    {
        printf("身份:富人:   ");
    }
    else if (p1.money<500000)
    {
        printf("身份:土豪:   ");
    }
    else
    {
        printf("身份:首富:   ");
    }
    puts(p1.allname);
    printf("金钱:%d\n",p1.money);
    weizhi[p1.dangqian]=' ';
    printf("请选择操作:0.存档         1.查看个人房产       2.前进\n");
    scanf("%d",&choice);
    if (choice==0)
    {
        fp=fopen(p1.allname,"wb");
        fwrite(&p1,sizeof(struct player),1,fp);
        fwrite(&p2,sizeof(struct player),1,fp);
        fclose(fp);
        goto turn;
    }
    else if (choice==1)
    {
        for (a=0;a<=19;a++)
        {
            if (p1.fangchan[0][a]==1)
            {
                switch (a)
                {
                case 0:printf("火星大道1号\n");b=1;break;
                case 1:printf("火星大道2号\n");b=1;break;
                case 2:printf("解放路1号\n");b=1;break;
                case 3:printf("解放路2号\n");b=1;break;
                case 4:printf("解放路3号\n");b=1;break;
                case 5:printf("解放路4号\n");b=1;break;
                case 6:printf("解放路5号\n");b=1;break;
                case 7:printf("花炮大道1号\n");b=1;break;
                case 8:printf("花炮大道2号\n");b=1;break;
                case 9:printf("花炮大道3号\n");b=1;break;
                case 10:printf("花炮大道4号\n");b=1;break;
                case 11:printf("花炮大道5号\n");b=1;break;
                case 12:printf("花炮大道6号\n");b=1;break;
                case 13:printf("花炮大道7号\n");b=1;break;
                case 14:printf("花炮大道8号\n");b=1;break;
                case 15:printf("花炮大道9号\n");b=1;break;
                case 16:printf("桂花路1号\n");b=1;break;
                case 17:printf("桂花路2号\n");b=1;break;
                case 18:printf("桂花路3号\n");b=1;break;
                default:break;
                }
                if (b==1)
                {
                    if (p1.fangchan[1][a]==1)
                    {
                        printf("建设旅馆一座:\n");
                        printf("旅馆等级:%d星级\n",p1.fangchan[2][a]);
                        printf("每次停留收取费用:%d\n",p1.fangchan[3][a]);
                        printf("\n");
                    }
                    else if(p1.fangchan[1][a]==2)
                    {
                        printf("建设商店一座:\n");
                        switch (p1.fangchan[2][a])
                        {
                        case 1:printf("等级:小卖部\n");break;
                        case 2:printf("等级:商店\n");break;
                        case 3:printf("等级:超市\n");break;
                        case 4:printf("等级:全国连锁超市\n");break;
                        case 5:printf("等级:世界连锁贸易市场\n");break;
                        default:break;
                        }
                        printf("每回合收入为:%d",p1.fangchan[4][a]);
                        printf("\n");
                    }
                    else
                    {
                        printf("仅有地皮一份。\n");
                    }
                }
            }
        }
        system("pause");
        goto turn;
    }
    else if (choice==9)
    {
        qianjinbs=1;
        goto miji;
    }
    else
    {
        shijian(12);
        if (p1.days>=100)
    {
        goto end;
    }
        qianjinbs=rand()%6;
        qianjinbs=qianjinbs+1;
miji:printf("你投出了%d点!",qianjinbs);
        p1.dangqian=qianjin(qianjinbs,p1.dangqian,weizhi,p1.name);
jintui:switch (p1.dangqian)
        {
        case 0:printf("停在起点奖励1000!\n");p1.money+=1000;system("pause");break;
        case 3:printf("前进三格!\n");c=3;p1.dangqian=qianjin(c,p1.dangqian,weizhi,p1.name);goto jintui;
        case 9:printf("进入人品驿站~~考验人品的时候到了!\n");Sleep(1000);p1.money=renpin(p1.money);;break;
        case 16:printf("后退两格!\n");c=2;p1.dangqian=houtui(c,p1.dangqian,weizhi,p1.name);goto jintui;
        case 20:{printf("进入赌场!!\n");
            Sleep(500);
            p1.money=duchang(p1.money);
            if (p1.days>=100)
    {
        goto end;
    }
            break;}
        case 21:printf("前进两格!\n");c=2;p1.dangqian=qianjin(c,p1.dangqian,weizhi,p1.name);goto jintui;
        case 22:printf("进入人品驿站~~考验人品的时候到了!\n");Sleep(1000);p1.money=renpin(p1.money);;break;
        default:fang(p1.turns);break;
        }
         system("cls");
         weizhi[p1.dangqian]=1;
         qipan(weizhi);
        weizhi[p1.dangqian]=' ';
        for (b=1,a=0;a<=18;a++)
        {
        if (p1.fangchan[1][a]==2)
        {
            printf("%d号商店收益:%d  ",a,p1.fangchan[4][a]);
            p1.money=p1.money+p1.fangchan[4][a];
            b++;
            if (b==4)
            {
                printf("\n");
                b=1;
            }
        }
        }
        system("pause");
        p1.turns=0;
        goto turn;
    }
    }
    else
    {
        system("cls");
     weizhi[p1.dangqian]=1;
     weizhi[p2.dangqian]=2;
    qipan(weizhi);
    printf("第%d天\n",p1.days);
        if (p2.money<500)
    {
        printf("身份:贫民:   ");
    }
        else if (p2.money<10000)
    {
        printf("身份:平民:   ");
    }
    else if (p2.money<20000)
    {
        printf("身份:小资:   ");
    }
    else if (p2.money<50000)
    {
        printf("身份:富人:   ");
    }
    else if (p2.money<500000)
    {
        printf("身份:土豪:   ");
    }
    else
    {
        printf("身份:首富:   ");
    }
    puts(p2.allname);
    printf("金钱:%d\n",p2.money);
    weizhi[p2.dangqian]=' ';
    printf("请选择操作:0.存档         1.查看个人房产       2.前进\n");
    scanf("%d",&choice);
    if (choice==0)
    {
        fp=fopen(p1.allname,"wb");
        fwrite(&p1,sizeof(struct player),1,fp);
        fwrite(&p2,sizeof(struct player),1,fp);
        fclose(fp);
        goto turn;
    }
    else if (choice==1)
    {
/* 输出个人信息,真特么麻烦 */

        for (a=0;a<=19;a++)
        {
            if (p2.fangchan[0][a]==1)
            {
                switch (a)
                {
                case 0:printf("火星大道1号\n");b=1;break;
                case 1:printf("火星大道2号\n");b=1;break;
                case 2:printf("解放路1号\n");b=1;break;
                case 3:printf("解放路2号\n");b=1;break;
                case 4:printf("解放路3号\n");b=1;break;
                case 5:printf("解放路4号\n");b=1;break;
                case 6:printf("解放路5号\n");b=1;break;
                case 7:printf("花炮大道1号\n");b=1;break;
                case 8:printf("花炮大道2号\n");b=1;break;
                case 9:printf("花炮大道3号\n");b=1;break;
                case 10:printf("花炮大道4号\n");b=1;break;
                case 11:printf("花炮大道5号\n");b=1;break;
                case 12:printf("花炮大道6号\n");b=1;break;
                case 13:printf("花炮大道7号\n");b=1;break;
                case 14:printf("花炮大道8号\n");b=1;break;
                case 15:printf("花炮大道9号\n");b=1;break;
                case 16:printf("桂花路1号\n");b=1;break;
                case 17:printf("桂花路2号\n");b=1;break;
                case 18:printf("桂花路3号\n");b=1;break;
                default:break;
                }
                if (b==1)
                {
                    if (p2.fangchan[1][a]==1)
                    {
                        printf("建设旅馆一座:\n");
                        printf("旅馆等级:%d星级\n",p2.fangchan[2][a]);
                        printf("每次停留收取费用:%d\n",p2.fangchan[3][a]);
                        printf("\n");
                    }
                    else if(p2.fangchan[1][a]==2)
                    {
                        printf("建设商店一座:\n");
                        switch (p2.fangchan[2][a])
                        {
                        case 1:printf("等级:小卖部\n");break;
                        case 2:printf("等级:商店\n");break;
                        case 3:printf("等级:超市\n");break;
                        case 4:printf("等级:全国连锁超市\n");break;
                        case 5:printf("等级:世界连锁贸易市场\n");break;
                        default:break;
                        }
                        printf("每回合收入为:%d",p2.fangchan[4][a]);
                        printf("\n");
                    }
                    else
                    {
                        printf("仅有地皮一份。\n");
                    }
                }
            }
        }
        system("pause");
        goto turn;
    }
    else if (choice==9)
    {
        qianjinbs=1;
        goto miji2;
    }
    else
    {
        shijian(12);
        if (p1.days>=100)
    {
        goto end;
    }
        a=rand()%6;
        qianjinbs=a+1;
miji2:printf("你投出了%d点!",qianjinbs);
        p2.dangqian=qianjin(qianjinbs,p2.dangqian,weizhi,p2.name);
jintui2:switch (p2.dangqian)
        {
        case 0:printf("停在起点奖励1000!\n");p2.money+=1000;system("pause");break;
        case 3:printf("前进三格!\n");c=3;p2.dangqian=qianjin(c,p2.dangqian,weizhi,p2.name);goto jintui2;
        case 9:printf("进入人品驿站~~考验人品的时候到了!\n");Sleep(1000);p2.money=renpin(p2.money);;break;
        case 16:printf("后退两格!\n");c=2;p2.dangqian=houtui(c,p2.dangqian,weizhi,p2.name);goto jintui2;
        case 20:{printf("进入赌场!!\n");
            Sleep(500);
            p2.money=duchang(p2.money);
            if (p1.days>=100)
    {
        goto end;
    }
            break;}
        case 21:printf("前进两格!\n");c=2;p2.dangqian=qianjin(c,p2.dangqian,weizhi,p2.name);goto jintui2;
        case 22:printf("进入人品驿站~~考验人品的时候到了!\n");Sleep(1000);p2.money=renpin(p2.money);;break;
        default:fang(p1.turns);break;
        }
         system("cls");
         weizhi[p2.dangqian]=2;
         qipan(weizhi);
        weizhi[p2.dangqian]=' ';
        for (b=1,a=0;a<=18;a++)
        {
        if (p2.fangchan[1][a]==2)
        {
            printf("%d号商店收益:%d  ",a,p2.fangchan[4][a]);
            p2.money=p2.money+p2.fangchan[4][a];
            b++;
            if (b==4)
            {
                printf("\n");
                b=1;
            }
        }
        }
        system("pause");
        p1.turns=1;
        goto turn;
    }
    }
end:printf("名字:");
        puts(p1.allname);
        if (p1.money<3000)
    {
        printf("身份:贫民\n");
        printf("弱爆了你,才这点钱~!\n");
        m=10;
    }
        else if (p1.money<5000)
    {
        printf("身份:平民\n");
        printf("勉勉强强够糊口吧~~~\n");
        m=20;
    }
    else if (p1.money<10000)
    {
        printf("身份:小资\n");
        printf("还好还好不算丢脸~~~\n");
        m=30;
    }
    else if (p1.money<20000)
    {
        printf("身份:富人\n");
        printf("十分不错,RP棒棒哒~~!!\n");
        m=40;
    }
    else if (p1.money<50000)
    {
        printf("身份:土豪\n");
        printf("土豪我们做朋友吧~");
        m=50;
    }
    else
    {
        printf("身份:首富\n");
        printf("膜拜。。。");
        m=60;
    }
        printf("\n金钱:%d\n",p1.money);
        for (a=0,c=0;a<=19;a++)
        {
            if (p1.fangchan[0][a]==1)
            {
                switch (a)
                {
                case 0:printf("火星大道1号\n");b=1;break;
                case 1:printf("火星大道2号\n");b=1;break;
                case 2:printf("解放路1号\n");b=1;break;
                case 3:printf("解放路2号\n");b=1;break;
                case 4:printf("解放路3号\n");b=1;break;
                case 5:printf("解放路4号\n");b=1;break;
                case 6:printf("解放路5号\n");b=1;break;
                case 7:printf("花炮大道1号\n");b=1;break;
                case 8:printf("花炮大道2号\n");b=1;break;
                case 9:printf("花炮大道3号\n");b=1;break;
                case 10:printf("花炮大道4号\n");b=1;break;
                case 11:printf("花炮大道5号\n");b=1;break;
                case 12:printf("花炮大道6号\n");b=1;break;
                case 13:printf("花炮大道7号\n");b=1;break;
                case 14:printf("花炮大道8号\n");b=1;break;
                case 15:printf("花炮大道9号\n");b=1;break;
                case 16:printf("桂花路1号\n");b=1;break;
                case 17:printf("桂花路2号\n");b=1;break;
                case 18:printf("桂花路3号\n");b=1;break;
                default:break;
                }
                if (b==1)
                {
                    if (p1.fangchan[1][a]==1)
                    {
                        printf("建设旅馆一座:\n");
                        printf("旅馆等级:%d星级\n",p1.fangchan[2][a]);
                        printf("每次停留收取费用:%d\n",p1.fangchan[3][a]);
                        printf("\n");
                    }
                    else if(p1.fangchan[1][a]==2)
                    {
                        printf("建设商店一座:\n");
                        switch (p1.fangchan[2][a])
                        {
                        case 1:printf("等级:小卖部\n");break;
                        case 2:printf("等级:商店\n");break;
                        case 3:printf("等级:超市\n");break;
                        case 4:printf("等级:全国连锁超市\n");break;
                        case 5:printf("等级:世界连锁贸易市场\n");break;
                        default:break;
                        }
                        printf("每回合收入为:%d",p1.fangchan[4][a]);
                        printf("\n");
                    }
                    else
                    {
                        printf("仅有地皮一份。\n");
                    }
                    c++;
                }
            }
        }
    if (c==0)
    {
        printf("没地?别说我认识你啊。。。\n");
        n=10;
    }
    else if (c<5)
    {
        printf("啧啧。。怎么混的你竟然才这么点地?\n");
        n=20;
    }
    else if (c<10)
    {
        printf("算是勉强勉强够混口饭吃了吧。。。\n");
        n=30;
    }
    else if (c<18)
    {
        printf("没错你就是传说中无恶不作的房地产大商!!!\n");
        n=40;
    }
    else
    {
        printf("买下所有地皮,达成最高成就:城主!!\n");
        n=60;
    }
    p=m+n;
    printf("最终积分为:%d",p);
    system("pause");
    system("cls");
    printf("名字:");
        puts(p2.allname);
        if (p2.money<3000)
    {
        printf("身份:贫民\n");
        printf("弱爆了你,才这点钱~!\n");
        m=10;
    }
        else if (p2.money<5000)
    {
        printf("身份:平民\n");
        printf("勉勉强强够糊口吧~~~\n");
        m=20;
    }
    else if (p2.money<10000)
    {
        printf("身份:小资\n");
        printf("还好还好不算丢脸~~~\n");
        m=30;
    }
    else if (p2.money<20000)
    {
        printf("身份:富人\n");
        printf("十分不错,RP棒棒哒~~!!\n");
        m=40;
    }
    else if (p2.money<50000)
    {
        printf("身份:土豪\n");
        printf("土豪我们做朋友吧~");
        m=50;
    }
    else
    {
        printf("身份:首富\n");
        printf("膜拜。。。");
        m=60;
    }
        printf("\n金钱:%d\n",p2.money);
        for (a=0,c=0;a<=19;a++)
        {
            if (p2.fangchan[0][a]==1)
            {
                switch (a)
                {
                case 0:printf("火星大道1号\n");b=1;break;
                case 1:printf("火星大道2号\n");b=1;break;
                case 2:printf("解放路1号\n");b=1;break;
                case 3:printf("解放路2号\n");b=1;break;
                case 4:printf("解放路3号\n");b=1;break;
                case 5:printf("解放路4号\n");b=1;break;
                case 6:printf("解放路5号\n");b=1;break;
                case 7:printf("花炮大道1号\n");b=1;break;
                case 8:printf("花炮大道2号\n");b=1;break;
                case 9:printf("花炮大道3号\n");b=1;break;
                case 10:printf("花炮大道4号\n");b=1;break;
                case 11:printf("花炮大道5号\n");b=1;break;
                case 12:printf("花炮大道6号\n");b=1;break;
                case 13:printf("花炮大道7号\n");b=1;break;
                case 14:printf("花炮大道8号\n");b=1;break;
                case 15:printf("花炮大道9号\n");b=1;break;
                case 16:printf("桂花路1号\n");b=1;break;
                case 17:printf("桂花路2号\n");b=1;break;
                case 18:printf("桂花路3号\n");b=1;break;
                default:break;
                }
                if (b==1)
                {
                    if (p2.fangchan[1][a]==1)
                    {
                        printf("建设旅馆一座:\n");
                        printf("旅馆等级:%d星级\n",p1.fangchan[2][a]);
                        printf("每次停留收取费用:%d\n",p1.fangchan[3][a]);
                        printf("\n");
                    }
                    else if(p2.fangchan[1][a]==2)
                    {
                        printf("建设商店一座:\n");
                        switch (p2.fangchan[2][a])
                        {
                        case 1:printf("等级:小卖部\n");break;
                        case 2:printf("等级:商店\n");break;
                        case 3:printf("等级:超市\n");break;
                        case 4:printf("等级:全国连锁超市\n");break;
                        case 5:printf("等级:世界连锁贸易市场\n");break;
                        default:break;
                        }
                        printf("每回合收入为:%d",p2.fangchan[4][a]);
                        printf("\n");
                    }
                    else
                    {
                        printf("仅有地皮一份。\n");
                    }
                    c++;
                }
            }
        }
    if (c==0)
    {
        printf("没地?别说我认识你啊。。。\n");
        n=10;
    }
    else if (c<5)
    {
        printf("啧啧。。怎么混的你竟然才这么点地?\n");
        n=20;
    }
    else if (c<10)
    {
        printf("算是勉强勉强够混口饭吃了吧。。。\n");
        n=30;
    }
    else if (c<18)
    {
        printf("没错你就是传说中无恶不作的房地产大商!!!\n");
        n=40;
    }
    else
    {
        printf("买下所有地皮,达成最高成就:城主!!\n");
        n=60;
    }
    q=m+n;
    printf("您的最终积分为:%d",q);
    if (p>q)
    {
        printf("1P更胜一筹哦!\n");
    }
    else if (q>p)
    {
        printf("2P更强一些诶!\n");
    }
    else
    {
        printf("十分和谐有爱的平手!\n");
    }
    system("pause");
    printf("想看彩蛋吗?输入1则继续!输入其他数字退出~\n");
    scanf("%d",&a);
    if (a)
    {
caidan:system("cls");
    for (a=1;a<=100;a++)
    {
        printf("壮哉我大622~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
    }
    printf("没错这就是彩蛋!\n");
    printf("好啦游戏结束~~");
    }
    else
    {
        printf("不看也得看!!\n");
        system("pause");
        goto caidan;
    }
    system("pause");
    return 0;
}

/*时间*/
int shijian(int a)
{
    p1.hours+=a;
    if (p1.hours>=12)
    {
        p1.hours-=12;
        p1.days++;
    }
    return 0;
}
/*定义界面函数*/
int qipan(char weizhi[28])
    {
        system("cls");
        printf("_____________________________________________________________\n");
        printf("|%c   1|%c   2|%c   3|%c   4|%c   5|%c   6|%c   7|%c   8|%c   9|%c  10|\n",weizhi[0],weizhi[1],weizhi[2],weizhi[3],weizhi[4],weizhi[5],weizhi[6],weizhi[7],weizhi[8],weizhi[9]);
        printf("|开始 |火 星|大 道|前进 |     | 解  |  放 |  路 |     |人品 |\n");
        printf("|     |1 号 |2 号 |3 格 |1 号 |2 号 |3 号 |4 号 |5 号 |驿站 |\n");
        printf("-------------------------------------------------------------\n");
        printf("|%c  26|                                               |%c  11|\n",weizhi[25],weizhi[10]);
        printf("|桂   |                                               |     |\n");
        printf("|3 号 |                                               |1 号 |\n");
        printf("|-----|                                               |-----|\n");
        printf("|%c  25|                                               |%c  12|\n",weizhi[24],weizhi[11]);
        printf("|花   |           大      富      翁                  |花   |\n");
        printf("|2 号 |                                               |2 号 |\n");
        printf("|-----|                                               |-----|\n");
        printf("|%c  24|                                               |%c  13|\n",weizhi[23],weizhi[12]);
        printf("|路   |                                               |炮   |\n");
        printf("|1 号 |                                               |3 号 |\n");
        printf("-------------------------------------------------------------\n");
        printf("|%c  23|%c  22|%c  21|%c  20|%c  19|%c  18|%c  17|%c  16|%c  15|%c  14|\n",weizhi[22],weizhi[21],weizhi[20],weizhi[19],weizhi[18],weizhi[17],weizhi[16],weizhi[15],weizhi[14],weizhi[13]);
        printf("|人品 |前进 |赌场 |     |     |     |后退 |     |道   |大   |\n");
        printf("|驿站 |2 格 |     |9 号 |8 号 |7 号 |2 格 |6 号 |5 号 |4 号 |\n");
        printf("-------------------------------------------------------------\n");
        return 0;
    }
/*定义前进函数*/
    int qianjin(int qianjinbs,int dangqian,char weizhi[28],char name)
    {
        int a,b;
        for(b=0;b<qianjinbs;b++)
        {
            dangqian++;
            if (dangqian>=26)
            {
                dangqian=0;
            }
            weizhi[dangqian]=name;
            Sleep(1000);
            qipan(weizhi);
            weizhi[dangqian]=' ';
        }
        return dangqian;
    }
/*定义后退函数*/
    int houtui(int houtuibs,int dangqian,char weizhi[28],char name)
    {
        int a,b;
        for(b=0,a=0;b<houtuibs;b++)
        {
            if (dangqian<=0)
            {
                dangqian=0;
            }
            else
            {
                dangqian=dangqian-1;
            }
            weizhi[dangqian]=name;
            Sleep(1000);
            qipan(weizhi);
            weizhi[dangqian]=' ';
        }
        return dangqian;
    }

    /*一大作死项目:房地产!*/
   int fang(int turns)
   {
    int fanghao;
    int a,b,c;
    if (p1.turns)
    {
    switch (p1.dangqian)
    {
        case 1:fanghao=0;break;
        case 2:fanghao=1;break;
        case 4:fanghao=2;break;
        case 5:fanghao=3;break;
        case 6:fanghao=4;break;
        case 7:fanghao=5;break;
        case 8:fanghao=6;break;
        case 10:fanghao=7;break;
        case 11:fanghao=8;break;
        case 12:fanghao=9;break;
        case 13:fanghao=10;break;
        case 14:fanghao=11;break;
        case 15:fanghao=12;break;
        case 17:fanghao=13;break;
        case 18:fanghao=14;break;
        case 19:fanghao=15;break;
        case 23:fanghao=16;break;
        case 24:fanghao=17;break;
        case 25:fanghao=18;break;
        default:break;
    }
    if (p2.fangchan[0][fanghao]==0)
    {
    if (p1.fangchan[0][fanghao]==0)
    {
        printf("1.购下该地皮,花费500,   其他任意数返回\n");
        scanf("%d",&a);
        if (a==1)
        {
            p1.fangchan[0][fanghao]=1;
            p1.money-=500;
        }
    }
    else if (p1.fangchan[1][fanghao]==0)
    {
        printf("1.升级成旅馆,花费200\n2.升级成商店,花费200\n输入其他任意数字返回\n");
        scanf("%d",&a);
        switch (a)
        {
        case 1:p1.fangchan[1][fanghao]=1;p1.money=p1.money-200;p1.fangchan[2][fanghao]=1;p1.fangchan[3][fanghao]=500;break;
        case 2:p1.fangchan[1][fanghao]=2;p1.money=p1.money-200;p1.fangchan[2][fanghao]=1;p1.fangchan[4][fanghao]=50;break;
        default:break;
        }
    }
    else if (p1.fangchan[1][fanghao]==1)
    {
        p1.fangchan[4][fanghao]=0;
        printf("当前为%d星级旅馆\n1.花费%d升级旅馆\n输入其他任意数字返回\n",p1.fangchan[2][fanghao],500*(p1.fangchan[2][fanghao]+1));
        scanf("%d",&a);
        if (a==1)
        {
            if (p1.fangchan[2][fanghao]==5)
            {
                printf("已是最高级别!\n");
                system("pause");
                goto zuigao;
            }
            p1.fangchan[2][fanghao]++;
            p1.money=p1.money-500*p1.fangchan[2][fanghao];
            p1.fangchan[3][fanghao]=p1.fangchan[3][fanghao]+200*p1.fangchan[2][fanghao];
            printf("升级完毕,当前为%d星级旅馆\n",p1.fangchan[2][fanghao]);
            printf("输入任意数字返回\n");
            scanf("%d",&c);
        }
    }
    else
    {
        printf("当前为%d级商店\n1.花费%d升级商店\n输入其他数字返回\n",p1.fangchan[1][fanghao],500*p1.fangchan[2][fanghao]);
        scanf("%d",&a);
        if (a==1)
        {
            if (p1.fangchan[2][fanghao]==5)
            {
                printf("已是最高级别!\n");
                printf("输入任意数字返回\n");
                scanf("%d",&c);
                goto zuigao;
            }
            p1.fangchan[2][fanghao]++;
            p1.money=p1.money-500*p1.fangchan[2][fanghao];
            p1.fangchan[4][fanghao]=p1.fangchan[4][fanghao]+10*p1.fangchan[2][fanghao];
            printf("升级完毕,当前为%d星级商店\n",p1.fangchan[2][fanghao]);
            system("pause");
        }
    }
    }
    else if (p2.fangchan[1][fanghao]==1)
    {
        printf("被收取过路费住宿费%d\n",p2.fangchan[3][fanghao]);
        p1.money=p1.money-p2.fangchan[3][fanghao];
        p2.money=p2.money+p2.fangchan[3][fanghao];
        system("pause");
    }
    }
    else
    {
        switch (p2.dangqian)
    {
        case 1:fanghao=0;break;
        case 2:fanghao=1;break;
        case 4:fanghao=2;break;
        case 5:fanghao=3;break;
        case 6:fanghao=4;break;
        case 7:fanghao=5;break;
        case 8:fanghao=6;break;
        case 10:fanghao=7;break;
        case 11:fanghao=8;break;
        case 12:fanghao=9;break;
        case 13:fanghao=10;break;
        case 14:fanghao=11;break;
        case 15:fanghao=12;break;
        case 17:fanghao=13;break;
        case 18:fanghao=14;break;
        case 19:fanghao=15;break;
        case 23:fanghao=16;break;
        case 24:fanghao=17;break;
        case 25:fanghao=18;break;
        default:break;
    }
    if (p1.fangchan[0][fanghao]==0)
    {
    if (p2.fangchan[0][fanghao]==0)
    {
        printf("1.购下该地皮,花费500,   其他任意数返回\n");
        scanf("%d",&a);
        if (a==1)
        {
            p2.fangchan[0][fanghao]=1;
            p2.money-=500;
        }
    }
    else if (p2.fangchan[1][fanghao]==0)
    {
        printf("1.升级成旅馆,花费200\n2.升级成商店,花费200\n输入其他任意数字返回\n");
        scanf("%d",&a);
        switch (a)
        {
        case 1:p2.fangchan[1][fanghao]=1;p2.money=p1.money-200;p2.fangchan[2][fanghao]=1;p2.fangchan[3][fanghao]=500;break;
        case 2:p2.fangchan[1][fanghao]=2;p2.money=p1.money-200;p2.fangchan[2][fanghao]=1;p2.fangchan[4][fanghao]=50;break;
        default:break;
        }
    }
    else if (p2.fangchan[1][fanghao]==1)
    {
        p2.fangchan[4][fanghao]=0;
        printf("当前为%d星级旅馆\n1.花费%d升级旅馆\n输入其他任意数字返回\n",p2.fangchan[2][fanghao],500*(p2.fangchan[2][fanghao]+1));
        scanf("%d",&a);
        if (a==1)
        {
            if (p2.fangchan[2][fanghao]==5)
            {
                printf("已是最高级别!\n");
                system("pause");
                goto zuigao;
            }
            p2.fangchan[2][fanghao]++;
            p2.money=p2.money-500*p2.fangchan[2][fanghao];
            p2.fangchan[3][fanghao]=p2.fangchan[3][fanghao]+200*p2.fangchan[2][fanghao];
            printf("升级完毕,当前为%d星级旅馆\n",p2.fangchan[2][fanghao]);
            printf("输入任意数字返回\n");
            scanf("%d",&c);
        }
    }
    else
    {
        printf("当前为%d级商店\n1.花费%d升级商店\n输入其他数字返回\n",p2.fangchan[1][fanghao],500*p2.fangchan[2][fanghao]);
        scanf("%d",&a);
        if (a==1)
        {
            if (p2.fangchan[2][fanghao]==5)
            {
                printf("已是最高级别!\n");
                printf("输入任意数字返回\n");
                scanf("%d",&c);
                goto zuigao;
            }
            p2.fangchan[2][fanghao]++;
            p2.money=p1.money-500*p2.fangchan[2][fanghao];
            p2.fangchan[4][fanghao]=p2.fangchan[4][fanghao]+10*p2.fangchan[2][fanghao];
            printf("升级完毕,当前为%d星级商店\n",p2.fangchan[2][fanghao]);
            system("pause");
        }
    }
    }
    else if (p1.fangchan[1][fanghao]==1)
    {
        printf("被收取过路费住宿费%d\n",p1.fangchan[3][fanghao]);
        p2.money=p2.money-p1.fangchan[3][fanghao];
        p1.money=p1.money+p1.fangchan[3][fanghao];
        system("pause");
    }
    }
zuigao:return 0;
}
    /*人品驿站!!*/
int renpin(int money)
{
    int a,b;
    a=rand()%10;
    b=rand()%2000;
    switch (a)
    {
    case 0:printf("路边捡到一个钱包,获得%d!!\n",b);money=money+b;break;
    case 1:printf("路遇恶狗被咬,住院花费200!!\n");money=money-200;break;
    case 2:printf("见到小偷行窃,见义勇为被奖励500!!\n");money=money+500;break;
    case 3:printf("见到小偷行窃,见义勇为,军体拳耍了16套被砍了32刀,住院花费1000!!");money=money-1000;break;
    case 4:printf("捡到彩票,花费50元打的前往彩票中心兑奖后发现是过期彩票,又打的返回~~\n");money=money-100;break;
    case 5:printf("捡到彩票,花费50元打的前往彩票中心兑奖后发现是中奖彩票,获得1000元!\n");money=money+1000;break;
    case 6:printf("人民币涨值,资金上涨20%!!\n");money=money+money/5;break;
    case 7:printf("路遇乞丐,被强行勒索100元.\n");money=money-100;break;
    case 8:printf("长得太丑被好心人施舍200\n");money=money+200;break;
    case 9:printf("路边破解残局摊,获利100\n");money=money+100;break;
    }
    system("pause");
    return money;
}
/*作死的加入赌场函数*/
    /*此函数用于判断骰子猜测结果*/
int touzi(int touzi1,int touzi2,int a)
{
    int b,daxiao;
    int he;
    he=touzi1+touzi2;
    if (he>6)
    {
        daxiao=13;
        printf("大!\n");
    }
    else
    {
        daxiao=14;
        printf("小!\n");
    }
    if (a<=12)
    {
        if (a==he)
        {
            b=5;
        }
        else
        {
            b=0;
        }
    }
    else if (a<=14)
    {
        if (a==daxiao)
        {
            b=2;
        }
        else
        {
            b=0;
        }
    }
    else
    {
        if (touzi1==touzi2)
        {
            b=3;
        }
        else
        {
            b=0;
        }
    }
    return b;
}
int duchang(int money)
{
        int z[2][5];
        int x[2][6]={0};
        double beilv;
        int a,b,c,n,d,e,m,choice;
        int touzi1,touzi2,touzi0;
        int num,times,guess,p,q;
        int result;
        int touru;
        char name[20];
        int touzi(int touzi1,int touzi2,int a);
        touzi0=0;
    printf("**************************拉斯维加斯****************************\n输入您的赌场外号:\n");
    gets(name);
    /*此处用于清屏并输出当前个人档案*/
xinxi:
    touzi0++;
    if (touzi0>3)
    {
        goto ended;
    }
    shijian(3);
    if (p1.days>=100)
    {
        goto ended;
    }
    system("cls");
    printf("********************拉斯维加斯********************\n");
    puts(name);
    printf("当前资产:%d",money);
    if (money<500)
    {
        printf("\n身份:贫民\n");
    }
        else if (money<1000)
    {
        printf("\n身份:平民\n");
    }
    else if (money<2000)
    {
        printf("\n身份:小资\n");
    }
    else if (money<5000)
    {
        printf("\n身份:富人\n");
    }
    else if (money<50000)
    {
        printf("\n身份:土豪\n");
    }
    else
    {
        printf("\n身份:首富\n");
    }
    if (money<0)
    {
        printf("没钱还想进赌城~?\n");
        goto ended;
    }
    /*此处开始选择赌博*/
    printf("选择一种活动吧:\n1.掷骰子\n2.猜数\n3.炸金花\n4.21点\n5.退出赌城\n");
    scanf("%d",&choice);
    /*开始掷骰子*/
    if (choice==1)
    {
        system("cls");
        printf("OOOOOOOOOOoooooooooo 掷骰子 ooooooooooOOOOOOOOOO\n");
    touzi1=rand()%6+1;
    touzi2=rand()%6+1;
    printf("开始掷骰子,买定离手咯!\n");
    printf("您要买的是:\n1-12.买点数\n13.买大\n14.买小\n15.买豹子\n");
    scanf("%d",&a);
error3:printf("您买入多少钱呢:\n");
    scanf("%d",&touru);
    if (touru>money)
        {
            printf("没钱还敢乱喊价? \n");
            goto error3;
        }
    if (touru<0)
    {
        printf("你他妈是在逗我~?\n");
        goto error3;
    }
    printf("开!骰子情况是%d,%d!",touzi1,touzi2);
    b=touzi(touzi1,touzi2,a);
    money=money-touru+touru*b;
    system("pause");
    }
    /*开始猜数*/
    else if (choice==2)
    {
        system("cls");
        printf("//////////////////// 猜数 \\\\\\\\\\\\\\\\\\\\\n");
error1:printf("请输入您的押金,将按您猜数次数呈倍数返还:\n");
        scanf("%d",&touru);
        if (touru>money)
        {
            printf("没钱还敢乱喊价? \n");
            goto error1;
        }
        if (touru<0)
        {
        printf("你他妈是在逗我~?\n");
        goto error1;
        }
              num=rand()%100;
              for(times=0;times<=10;times++)
              {
                       printf("第%d次猜数:",times+1);
                       scanf("%d",&guess);
                       if (guess>num)
                       {
                              printf("\n猜的大了\n");
                       }
                       else if(guess<num)
                       {
                             printf("\n猜的小了\n");
                       }
                       else
                       {
                              printf("恭喜猜对啦!");
                              break;
                        }
              }
              if (times>=10)
              {
                  printf("10次都猜不出,弱爆了!!\n");
              }
              money=money-touru;
              times=22-2*times;
              beilv=times/10.0;
              money=money+touru*beilv;
              system("pause");
    }
    /*开始炸金花*/
    else if (choice==3)
    {
        system("cls");
        printf("xxxxxxxxxxXXXXXXXXXX 炸金花 XXXXXXXXXXxxxxxxxxxx\n");
        printf("由于本行业为暴利行业,故收取手续费为总金额百分之五,两百元以内则扣十元\n");
        if (money<=200)
        {
            money=money-10;
        }
        else
        {
            money=money*0.95;
        }
        for (m=0;m<=2;m++)
    {
        z[0][m]=rand()%13+1;
        z[1][m]=rand()%13+1;
    }
    /*在此进行排序*/
   for (d=0;d<=1;d++)
    {
        if (z[d][1]>z[d][0])
        {
            e=z[d][0];
            z[d][0]=z[d][1];
            z[d][1]=e;
        }
        if (z[d][2]>z[d][1])
        {
            e=z[d][1];
            z[d][1]=z[d][2];
            z[d][2]=e;
        }
        if (z[d][1]>z[d][0])
        {
            e=z[d][0];
            z[d][0]=z[d][1];
            z[d][1]=e;
        }
    }
    printf("您的手牌是:%d,%d,%d\n",z[0][0],z[0][1],z[0][2]);
error2:printf("您选择跟多少:\n");
    scanf("%d",&touru);
    if (touru>money)
        {
            printf("没钱还敢乱喊价? \n");
            goto error2;
        }
    if (touru<0)
    {
        printf("你他妈是在逗我~?\n");
        goto error2;
    }
    money=money-touru;
    /*此处开始比大小出结果*/
    for (d=0;d<=1;d++)
    {
        if (z[d][0]==z[d][1] && z[d][1]==z[d][2])
        {
            z[d][3]=4;
            z[d][4]=z[d][0];
        }
        else if (z[d][0]==z[d][1] || z[d][1]==z[d][2] || z[d][0]==z[d][2])
        {
            z[d][3]=2;
            if (z[d][0]==z[d][1])
            {
                z[d][4]=z[d][0];
            }
            else if (z[d][1]==z[d][2])
            {
                z[d][4]=z[d][1];
            }
            else
            {
                z[d][4]=z[d][2];
            }
        }
        else
        {
            if (z[d][0]-z[d][1]==1 && z[d][1]-z[d][2]==1)
            {
                z[d][3]=3;
                z[d][4]=z[d][0];
            }
            else
            {
                z[d][3]=1;
                z[d][4]=z[d][0];
            }
        }
    }
        if (z[0][3]==z[1][3])
        {
            if (z[0][4]>=z[1][4])
            {
                n=2;
            }
            else
            {
                n=0;
            }
        }
        else if (z[0][3]>z[1][3])
        {
            n=2;
        }
        else
        {
            n=0;
        }
    touru=touru*n;
    printf("摊牌:%d,%d,%d \n",z[1][0],z[1][1],z[1][2]);
    printf("您获得%d \n",touru);
    money=money+touru;
    system("pause");
    }
    else if (choice==4)
        /*开始21点*/
    {
        system("cls");
        printf("################### 21点 ###################\n");
error4:printf("请投入押金:\n");
        scanf("%d",&touru);
        if (touru>money)
        {
            printf("没钱还敢乱喊价? \n");
            goto error4;
        }
        if (touru<0)
    {
        printf("你他妈是在逗我~?\n");
        goto error4;
    }
        money=money-touru;
/*双方发底牌*/
        for(m=0;m<=1;m++)
        {
            for(n=0;n<=1;n++)
            {
                x[m][n]=rand()%13;
                if (x[m][n]==0 || x[m][n]==11 || x[m][n]==12)
                {
                    x[m][n]=10;
                }
            }
        }
        printf("您当前的手牌为:%d,%d",x[0][0],x[0][1]);
        if(x[0][0]==1 && x[0][1]==1)
        {
            printf("玩家双龙!!!\n");
            beilv=5;
            goto under;
        }
        if((x[0][0]==1 && x[0][1]==10) || (x[0][0]==10 && x[0][1]==1))
        {
            printf("玩家21点!!\n");
            beilv=3;
            goto under;
        }
        if((x[1][0]==1 && x[1][1]==10) || (x[1][0]==10 && x[1][1]==1) || (x[1][0]==1 && x[1][1]==1))
        {
            printf("电脑21点!!\n");
            beilv=0;
            goto under;
        }
        printf("\n输入1则摊牌,输入其他数字继续加牌 \n");
        scanf("%d",&a);
        if (a==1)
        {
            goto tanpai;
        }
        x[0][2]=rand()%13;
        if (x[0][2]==0 || x[0][2]==11 || x[0][2]==12)
        {
            x[0][2]=10;
        }
        printf("您的手牌为:%d,%d,%d \n",x[0][0],x[0][1],x[0][2]);
        x[0][5]=x[0][0]+x[0][1]+x[0][2];
        if (x[0][5]>21)
        {
            beilv=0;
            printf("胀死了!");
            goto under;
        }
        printf("\n输入1则摊牌,输入其他数字继续加牌 \n");
        scanf("%d",&a);
        if (a==1)
        {
            goto tanpai;
        }
        x[0][3]=rand()%13;
        if (x[0][3]==0 || x[0][3]==11 || x[0][3]==12)
        {
            x[0][3]=10;
        }
        printf("您的手牌为:%d,%d,%d,%d \n",x[0][0],x[0][1],x[0][2],x[0][3]);
        x[0][5]=x[0][5]+x[0][3];
        if (x[0][5]>21)
        {
            beilv=0;
            printf("胀死了!! \n");
            goto under;
        }
        printf("\n输入1则摊牌,输入其他数字继续加牌 \n");
        scanf("%d",&a);
        if (a==1)
        {
            goto tanpai;
        }
        x[0][4]=rand()%13;
        if (x[0][4]==0 || x[0][4]==11 || x[0][3]==12)
        {
            x[0][4]=10;
        }
        printf("您的手牌为:%d,%d,%d,%d,%d \n",x[0][0],x[0][1],x[0][2],x[0][3],x[0][4]);
        x[0][5]=x[0][5]+x[0][4];
        if (x[0][5]>21)
        {
            beilv=0;
            printf("胀死了!! \n");
            goto under;
        }
        printf("五小!!\n");
        beilv=3;
        goto under;

tanpai:x[1][5]=x[1][0]+x[1][1];
        for(b=2;(x[1][5]<=17 && b<=4);b++)
        {
            x[1][b]=rand()%13;
            if (x[1][b]==0 || x[1][b]==11 || x[1][b]==12)
            {
                x[1][b]=10;
            }
            printf("电脑加牌:%d\n",x[1][b]);
            x[1][5]=x[1][5]+x[1][b];
            scanf("%d",&a);
        }
        printf("电脑手牌:%d,%d,%d,%d,%d\n",x[1][0],x[1][1],x[1][2],x[1][3],x[1][4]);
        if (x[1][5]>21)
        {
            printf("电脑胀死!\n");
            beilv=2;
            goto under;
        }
        if (x[1][5]>x[0][5])
        {
            printf("电脑大!\n");
            beilv=0;
        }
        else
        {
            printf("玩家大!!\n");
            beilv=2;
        }
under:money=money+touru*beilv;
      system("pause");
    }
    else
    {
        goto ended;
    }
    if (money<=0)
    {
        printf("\n资产用尽,您已被赶出拉斯维加斯\n");
    }
    else
    {
        goto xinxi;
    }
ended:  system("pause");
    return money;
}

 

1
蒋智航
蒋智航
高级天翼
高级天翼
#include <stdio.h>
#include <windows.h>
#include <conio.h>
#include <time.h>
#define Esc 27 //退出
#define Up 72 //上,下,左,右
#define Down 80
#define Left 75
#define Right 77
#define Kong 32 //发射子弹
int x=10; //飞机坐标
int y=18;
int d2=10;//敌机坐标
int d1=10; 
int d=10;
int r=1;
int r1=1;
int r2=1;
int t=1; // 游戏结束
int f=0; // 计分数
int m=100; // 敌机数
int j=0; // 歼敌数
char p; // 接受按键


void kongzhi(int bx,int by);//声明函数
void huatu();
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 shuoming() 
{
printf("\t\t\t\n\n\n\n");

printf("\t\t\t方向控制\n\n"
"\t\t\t上 ↑\n\n"
"\t\t\t下 ↓\n\n"
"\t\t\t左 ←\n\n"
"\t\t\t右 →\n\n"
"\t\t\t子弹 空格\n\n\n"
"\t\t\t退出请按 ESC\n");
gotoxy(0,0); 
}
void byebye()
{
if((x==d&&y==r)||(x==d1&&y==r1)||(x==d2&&y==r2))
{ gotoxy(1,3);
printf(" !!! 游戏结束 !!!\n"
"*******************\n"
" 您的总得分: %d\n\n"
" 敌机数: %d\n"
" 歼敌数: %d\n"
" 命中率: %.0f %%\n"
"*******************\n",f,m,j,((float)j/(float)m)*100);
while(!kbhit()) 
{ Sleep(500);
gotoxy(1,12);
printf(" 继续请按任意键...\n\n\n");
Sleep(900); 
gotoxy(1,12); 
printf(" ");
}
gotoxy(0,0);
huatu(); 
f=0; m=0; j=0;
if(x>=18) x--;
else x++;
gotoxy(x,y);
printf("Ж");
}
}
// 计分/更新敌机
void jifan()
{ 
if(x==d&&y==r)
{ gotoxy(d,r); printf("6");
Sleep(200);
gotoxy(d,r); printf(" "); f+=2; r=0; j++;}
if(x==d1&&y==r1)
{ gotoxy(d1,r1); printf("2");
Sleep(200);
gotoxy(d1,r1); printf(" "); f+=3; r1=0; j++;}
if(x==d2&&y==r2)
{ gotoxy(d2,r2); printf("3");
Sleep(200);
gotoxy(d2,r2); printf(" "); f+=1; r2=0; j++;}

gotoxy(26,2);
printf(" %d \n",f);

}
//画图
void huatu()
{ int i,n;

for(i=0;i<=2;i++)
{
for(n=0;n<=50;n++)
{
printf("*");
} 
printf("\n");
}
for(i=1;i<=19;i++)
{
for(n=1;n<=19;n++)
{
gotoxy(i,n);
printf(" ");
}
}
}


//随机产生敌机
void dfeiji ()
{ 
while(t)
{
if(!r) {d=rand()%16+2; m++;}
if(!r1) {d1=rand()%17+2; m++;}
if(!r2) {d2=rand()%20+2; m++;}
while(t)
{ r++; r1++; r2++;
gotoxy(d,r); printf("Ψ");
gotoxy(d1,r1); printf("ж");
gotoxy(d2,r2); printf("‰");
gotoxy(d2,r2); printf("! ");

Sleep(903);
gotoxy(d,r); printf(" ");
gotoxy(d1,r1); printf(" ");
gotoxy(d2,r2); printf(" ");


kongzhi(0,0);
byebye();
if(r==18) r=0;
if(r1==18) r1=0;
if(r2==18) r2=0;
if(r==0||r1==0||r2==0) break; 
}
}
}


//操控飞机
void kongzhi(int bx,int by)
{int a;


while (kbhit())
{if ((p=getch())==-32) p=getch();
a=p;
gotoxy(22,5);

switch(a)
{//控制方向
case Up:if (y!=1)
{ gotoxy(x,y); printf(" ");
y--; 
gotoxy(x,y); printf("Ж");
}break;
case Down:if (y!=18)
{ gotoxy(x,y); printf(" ");
y++;
gotoxy(x,y); printf("Ж");
}break;
case Left:if (x!=3)
{ gotoxy(x,y); printf(" ");
x--;
gotoxy(x,y); printf("Ж");
}break;
case Right:if (x!=18)
{ gotoxy(x,y); printf(" ");
x++;
gotoxy(x,y); printf("Ж");
}break;
case Kong:{ bx=y;
for(by=y;by>4;) //发射子弹
{ by--;
gotoxy(x,by); printf("■");
Sleep(12);
gotoxy(x,by); printf(" ");
y=by;
jifan();
if(r==0||r1==0||r2==0) break;
}
y=bx;
}break;

case Esc:t=0; break; //退出

default:break;
}
}
}

int main()
{
srand(time(NULL));
shuoming();
hidden();
huatu();
gotoxy(x,y);
printf("+");

gotoxy(13,2);
printf("分数:");
while (t)
{ kongzhi(0,0);
if(t)
dfeiji ();
}

}

 

0
蒋智航
蒋智航
高级天翼
高级天翼
#include <iostream>

#include <list>

#include <cstdio>

#include <string>

#include <vector>

#include <ctime>

#include <algorithm>

#include <conio.h>

#include <windows.h>

using namespace std;



class Node { 

public:

    int x, y;

    Node(int x1, int y1); 

};



class UserData { 

public:

    string name;

    long long score;

    int gt;

    int gr; 

    UserData(string s, long long sc,int gametime,int grade); 

    friend bool operator < (UserData a, UserData b); 

};



#define RIGHT 0x4d

#define LEFT 0x4b  

#define UP 0x48  

#define DOWN 0x50 

#define YELLOW FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY

#define CYAN FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY

#define ORANGE FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY

#define PURPLE FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY

#define RED  FOREGROUND_RED | FOREGROUND_INTENSITY

const int STARTX = 8; 

const int STARTY = 4; 

const int RANGEX = 60; 

const int RANGEY = 20;

int point=10; 

const int ENDX = STARTX + RANGEX; 

const int ENDY = STARTY + RANGEY; 

bool isSnake[RANGEY + 10 ][RANGEX + 10];

int speed; 

int sysj;

int gametime;

list<Node> snake;

int curDiraction; //蛇的当前前进方向, 1上, 2下, 3左, 4右

int score; //当前分数

int grade;

int snakeLen; //蛇的长度

int foodx, foody; //食物坐标

int gox, goy; //蛇头坐标

int mj;

void GoTo(short x, short y); //定位光标

void DrawBoard(); //绘制边框

void ShowInformation(); //展示游戏信息

void Init(); //初始化游戏

void RunSnake(int x, int y); //绘制蛇身

void Try(int& x, int& y); //试走

bool IsGoodCoord(int x, int y); //前进坐标是否合法

void AddFood(); //增加食物

void EartFood(); //吃食物

void InitSnake(); //初始化蛇身

bool EndGame(); //结束游戏

bool StartGame(); //启动游戏

bool GameMenu(); //游戏菜单

void ShowRanking(); //排行榜

void ShowAbout(); //相关信息

void InputData(); //输入玩家名字



int main() {

    system("title 贪吃蛇小游戏 by 李凯昱");

    while (true) {

        if (!GameMenu()) return 0;

    }

    return 0;

}



Node::Node(int x1, int y1) { //构造Node对象

    x = x1; y = y1; 

}



bool operator < (UserData a, UserData b) { //重载运算符,按分数由大到小排列

    if(a.score != b.score)

    return a.score > b.score;

    if(a.gt !=b.gt)

    return a.gt > b.gt;

    else

    return a.gr > b.gr;

}

UserData::UserData(string s, long long sc,int gametime_,int _grade) { //构造UserData对象

    name = s; score = sc; gt=gametime_; gr=_grade;

}



void color(WORD A)

{

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), A);

} 



void Color(int score_)

{

    if(score_%4==1)

    {

        color(PURPLE);

    }

    else if(score_%4==2)

    {

        color(RED);

    }

    else if(score_%4==3)

    {

        color(YELLOW);

    }

    else if(score_%4==0) 

    {

        color(CYAN);

    }

}



void GoTo(short x, short y) { //定位光标

    COORD coord = { x, y };

    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);

}



void ShowInformation() { //输出游戏信息

    color(YELLOW);

    GoTo(78, 5);

    printf("贪吃蛇游戏");

    GoTo(78,18);

    gametime=(clock()-mj)/1000;

    grade=snakeLen-3; 

    printf("生存时间:%3d 秒",(clock()-mj)/1000);

    GoTo(78, 8);

    printf("游戏规则:");

    GoTo(78, 10);

    printf("请按 ↑ ↓ ← →  来控制您的蛇吃东西");

    GoTo(78, 12);

    printf("吃的越多,蛇就越长,您的等级也将越高");

    GoTo(78, 14);

    printf("当蛇吃到自己或撞上墙时,游戏结束。");

    GoTo(78,16);

    printf("自动前进时间:%3dms",speed);

    GoTo(78, 20);

    printf("当前等级: %8d", snakeLen-3);

    GoTo(78, 23);

    printf("您的分数: %d", score);

    color(CYAN);

    printf("+%d=%d",score/3,score*3/2);

    color(YELLOW);

    GoTo(78,25);

    printf("剩余时间:%d秒",10+(snakeLen-3)*4-gametime);

    sysj=10+(snakeLen-3)*4-gametime; 

}



void DrawBoard() { //绘制墙体



    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); //获得输出句柄



    CONSOLE_CURSOR_INFO cursor_info = { 1, 0 }; //光标信息

    SetConsoleCursorInfo(hOut, &cursor_info); //隐藏光标



    COORD size = { 120, 30 };

    SetConsoleScreenBufferSize(hOut, size); //重设缓冲区大小



    SMALL_RECT rc = { 0 , 0, 120, 30 };

    SetConsoleWindowInfo(hOut, true, &rc); //重设窗口大小



    SetConsoleTextAttribute(hOut, CYAN);



    for (int i = STARTX - 2; i <= ENDX + 2; i += 2) { //横向墙体

        GoTo(i, STARTY - 1);

        printf("■");

        GoTo(i, ENDY + 1);

        printf("■");

    }

    for (int i = STARTY - 1; i <= ENDY + 1; ++i) { //竖向墙体

        GoTo(STARTX - 2, i);

        printf("■");

        GoTo(ENDX + 2, i);

        printf("■");

    }

}

void draw()

{

    char m=snakeLen+62;

    Color(score);

    cout<<"■";

 } 

void Init() { //初始化游戏

    system("cls");

    memset(isSnake, 0, sizeof(isSnake));

    speed = 200;

    curDiraction = 4;

    score = 0;

    DrawBoard();

    InitSnake();

    ShowInformation();

    AddFood();

    mj=clock();

    point=10;

    sysj=10;

}



void RunSnake(int x, int y) { //绘制蛇身

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);

    score += snakeLen + 1;

    if (x == foodx && y == foody) {

        EartFood();

        AddFood();

        return;

    }

    snake.push_front(Node(x, y));

    isSnake[y][x] = true;

    GoTo(x, y);

    draw();

    Node back = snake.back();

    snake.pop_back();

    isSnake[back.y][back.x] = false;

    GoTo(back.x, back.y);

    printf(" ");

}



void Try(int& x, int& y) { //试走

    int key, cnt = 100;

    while (cnt--) { //多次检测键盘状态

        if (_kbhit()) {

            key = getch();

            switch (key) {

            case UP: 

                if (curDiraction == 1 || curDiraction == 2) break;

                --y; curDiraction = 1; return;

            case DOWN: 

                if (curDiraction == 1 || curDiraction == 2) break;

                ++y; curDiraction = 2; return;

            case LEFT: 

                if (curDiraction == 3 || curDiraction == 4) break;

                x -= 2; curDiraction = 3; return;

            case RIGHT: 

                if (curDiraction == 3 || curDiraction == 4) break;

                x += 2; curDiraction = 4; return;

            }

        }

    }

    if (curDiraction == 1) --y; //用户没有输入时

    else if (curDiraction == 2) ++y;

    else if (curDiraction == 3) x -= 2;

    else x += 2;

}



bool IsGoodCoord(int x, int y) { //判断光标是否合法

    if (x <= ENDX && y <= ENDY && x >= STARTX && y >= STARTY)

        return true;

    else

        return false;

}



void AddFood() { //增加食物

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), PURPLE);

    srand((unsigned)time(NULL));

    while (true) {

        foodx = (rand()%ENDX) + 1;

        foody = (rand()%ENDY) + 1;

        if (foodx&1) foodx++;

        if (!isSnake[foody][foodx] && IsGoodCoord(foodx, foody)) break;

    }

    GoTo(foodx, foody);

    int a=rand()%5;

    if(a>=4) 

    printf("★");

    else if(a<=1) 

    printf("○");

    else

    printf("▲");

}



void EartFood() { //吃东西

    point+=4;

    int sb=gametime=(clock()-mj)/1000;

    sysj=point-sb;

    score+=score/2;

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);

    snake.push_front(Node(foodx, foody));

    isSnake[foody][foodx] = true;

    ++snakeLen;

    if (speed >= 55) speed -= 5;



    GoTo(foodx, foody);

    draw();

    AddFood(); 

}



void InitSnake() { //初始化蛇身

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);

    snakeLen = 3, gox = 18, goy = 14;

    snake.clear();

    snake.push_front(Node(12, 14));

    snake.push_front(Node(14, 14));

    snake.push_front(Node(16, 14));

    for (int i = 12; i <= 16; i += 2) {

        GoTo(i, 14);

        draw();

        isSnake[14][i] = true;

    }

}

bool EndGame() { //结束游戏

    system("cls");

    DrawBoard();

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);

    GoTo(28, 10);

    printf("您的本局游戏得分: %d分", score);

    GoTo(32, 18);

    printf("....你挂了....");

    GoTo(27, 20);

    printf("是否继续游戏: 是(1), 否(0)");

    GoTo(27, 22);

    char key = getch();

    while (true) {

        if (key == '1') return false;

        else if (key == '0') 

        {GoTo(ENDX+1,ENDY+2);

        exit(0);return true;

        }

        else key = getch();

    }

}



bool StartGame() { //启动游戏



    Init();



    while (IsGoodCoord(gox, goy) && !isSnake[goy][gox]&&sysj>0) { //当试走合法时

        RunSnake(gox, goy);

        ShowInformation();

        Try(gox, goy);

        Sleep(speed);

    }

    InputData(); 

    return true;

}



bool GameMenu() { //游戏菜单

    system("cls");

    DrawBoard();

    GoTo(STARTX + 22, STARTY + 4);

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);

    printf("欢迎进入贪吃蛇游戏!");

    GoTo(STARTX + 24, STARTY + 10);

    printf("1: 新游戏");

    GoTo(STARTX + 24, STARTY + 12);

    printf("2: 排行榜");

    GoTo(STARTX + 24, STARTY + 14);

    printf("3: 关于游戏");

    GoTo(STARTX + 24, STARTY + 16);

    printf("4: 退出游戏");



    while (true) {

        if (_kbhit()) {

            char key = getch();

            switch (key) {

            case '1':

                if (!StartGame()) return false; 

                else return true;

            case '2':

                ShowRanking(); return true;

            case '3':

                ShowAbout(); return true;

            case '4':

                GoTo(1,ENDY+2);

                return false;

            default:

                return true;

            }

        }

    }

}



void ShowRanking() { //展示排行榜

    vector<UserData> vu;

    FILE *fp = fopen("GameData.txt", "r");

    if (fp == NULL) fp = fopen("GameData.txt", "w+");

    char name[20];

    int len = 0;

    while (fscanf(fp, "%s", name) != EOF) {

        ++len;

        int score,g=grade;

        fscanf(fp, "%d%d%d%*c", &score,&gametime,&g);

        vu.push_back(UserData(string(name), score,gametime,grade));

    }

    fclose(fp);

    sort(vu.begin(), vu.end()); //对得分进行排名

    system("cls");

    DrawBoard();

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), CYAN);

    GoTo(STARTX + 8, STARTY + 2);

    printf("用户");

    GoTo(STARTX + 20, STARTY + 2);

    printf("分数");

    GoTo(STARTX + 32, STARTY + 2);

    printf("生存时间");

    GoTo(STARTX + 44, STARTY + 2);

    printf("排行");

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);



    for (int i = 0; i < len && i < 10; ++i) { //打印前十名用户数据

        char const *p = vu[i].name.c_str();

        Color(vu[i].score);

        GoTo(STARTX + 8, STARTY + 4 + i);

        printf("%s", p);

        GoTo(STARTX + 20, STARTY + 4 + i);

        printf("%d分", vu[i].score);

        GoTo(STARTX + 32, STARTY + 4 + i);

        printf("%d秒", vu[i].gt);

        GoTo(STARTX + 44, STARTY + 4 + i);

        printf(" %d", i + 1);

    }



    GoTo(STARTX + 4, ENDY - 2);

    printf("-----------------  按'1'返回游戏菜单  ---------------");

    while (true) {

        if (_kbhit()) {

            char key = getch();

            if (key == '1') break;

        }

    }

}



void ShowAbout() { //展示游戏相关

    system("cls");

    DrawBoard();

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);



    GoTo(STARTX + 4, STARTY + 2);

    printf("-------------------  贪吃蛇游戏  -------------------");

    GoTo(STARTX + 10, STARTY + 4);

    printf("制作人: ");

    GoTo(STARTX + 10, STARTY + 6);

    printf("蒋智航");

    GoTo(STARTX + 10,STARTY + 8);

    printf("贪吃蛇游戏");

    GoTo(STARTX + 10,STARTY + 10);

    printf("游戏规则:");

    GoTo(STARTX + 10,STARTY + 12);

    printf("请按 ↑ ↓ ← →  来控制您的蛇吃东西");

    GoTo(STARTX + 10,STARTY + 14);

    printf("吃的越多,蛇就越长,您的等级也将越高");

    GoTo(STARTX + 10,STARTY + 16);

    printf("当蛇吃到自己或撞上墙时,游戏结束。");



    GoTo(STARTX + 4, ENDY - 2);

    printf("-----------------  按'1'返回游戏菜单  ---------------");

    while (true) {

        if (_kbhit()) {

            char key = getch();

            if (key == '1') break;

        }

    }

}



void InputData() { //用户输入名字

    char name[20];

    if(score>=1000)

    {

    GoTo(STARTX + 10, STARTY + 10);

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), RED);

    printf("请输入你的名字: ");

    COORD coord = { STARTX + 10, STARTY + 12 };

    SetConsoleCursorPosition(GetStdHandle(STD_INPUT_HANDLE), coord);

    while (true) { //忽略非法字符

        scanf("%s", name);

        if (name[0] != 0 && name[0] != ' ') break; 

    }FILE *fp = fopen("Gamedata.txt", "a");

    if (fp == NULL) fp = fopen("GameData.txt", "w+");

    fprintf(fp, "%s %d %d \n", name, score,gametime);

    fclose(fp);

    }

    else 

    {

        GoTo(STARTX + 20, STARTY + 10);

        cout<<"哟!这分数也能上榜??"<<endl; 

        Sleep(1000);

     }  

    EndGame(); 



}

 

0
马佳滢
马佳滢
新手天翼
新手天翼

#include<iostream>

#include<stack>

#include<stdio.h>

#include<time.h>

#include<string>

using namespace std;

typedef struct

{

int x,y;

}item;

typedef struct

{

int x,y,d;

}Datetype;

typedef stack<Datetype> stack_int;

void path (int **maze,int,int,int,int);

void printpath();

#define NUM 100 //队列大小;

typedef struct{

int x,y; //所到点的坐标;

int pre; //前驱点的下标;

}SqType; //队列;

int front,rear; //队首指针与队尾指针;

void printpath(SqType sq[],int){//打印路径

int i;

i=rear;

do{

cout<<"("<<sq[i].x<<","<<sq[i].y<<")<--";

i=sq[i].pre; //回溯;

}while(i!=-1);

}

void restore(int **maze,int m,int n){//恢复迷宫

for(int i=1;i<=m;i++){

for(int j=1;j<=n;j++){

if(maze[i][j]==-1)

maze[i][j]=0;

}

}

}

int path1(int **maze,int m,int n,int c,int d,int x1,int y1)//最短路径

{ //m,n为迷宫的长和宽,c,d为迷宫入口坐标,x1,y1为迷宫出口坐标;maze为迷宫;

item move[8]={{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}}; //坐标增量数组;

SqType sq[NUM];

int x,y,i,j,v;

front=rear=0;

sq[0].x=c;

sq[0].y=d;

sq[0].pre=-1;

if(maze[c][d]==0)

maze[c][d]=-1;//入口点入队;

else goto G;

while(front<=rear){ //队列不为空

x=sq[front].x;

y=sq[front].y;

for(v=0;v<8;v++){

i=x+move[v].x;

j=y+move[v].y;

if(maze[i][j]==0){

rear++;

sq[rear].x=i;

sq[rear].y=j;

sq[rear].pre=front;

maze[i][j]=-1; //访问过的坐标点,入队;

}

if(i==x1&&j==y1){

cout<<"最短路径为:"<<endl;

printpath(sq,rear); //输出路径;

restore(maze,m,n); //恢复迷宫;

return 1;

}

} //for v;

front++; //当前点搜索完,取下一个点搜索

} //while

G:cout<<"无路径。"<<endl;

return 0;

}

void path(int **maze,int a,int b,int m,int n)

{

item move[8]={{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}};

stack_int st;

Datetype temp;

int x,y,d,i,j;

if(maze[a][b]==1){cout<<"进口输入有误。";return;}

temp.x=a;temp.y=b;temp.d=-1; //初始化入口点坐标及方向;

st.push(temp);

while(!st.empty())

{

temp=st.top();

st.pop();

x=temp.x;y=temp.y;d=temp.d+1;

while(d<8)

{

i=x+move[d].x;j=y+move[d].y;

if(maze[i][j]==0) //该点可到达;

{

temp.x=x;temp.y=y;temp.d=d; //坐标及方向;

st.push(temp); //坐标及方向入栈;

x=i;y=j;

maze[x][y]=-1;//到达新点;

if(x==m && y==n)

{

cout<<" 迷宫路径为:"<<endl;

cout<<"("<<m<<","<<n<<")<---";

Datetype t;

while(!st.empty())

{

t=st.top();

cout<<"("<<t.x<<","<<t.y<<")<---";

st.pop();

} //输出路径;

cout<<endl;

return ; //到达出口;

}

else d=0; //重新初始化方向;

}

else d++; //改变方向;

}

}

cout<<"对不起,无法找到出口.";

return; //迷宫无路;

}

void printpath()

{

int m,n,i,j,l,c,d;

string s;

cout<<"********************************************************************************\n"<<endl;

cout<<" 欢迎进入迷宫求解系统\n"<<endl;

cout<<"********************************************************************************\n"<<endl;

cout<<" 请输入迷宫的行数:"<<endl;

cin>>m;

cout<<" 请输入迷宫的列数:"<<endl;

cin>>n;

int **maze=new int*[m+2];

for(i=0;i<=m+1;i++)

maze[i]=new int[n+2];//申请迷宫的空间;

for(i=0;i<=m+1;i++)

maze[i][0]=1;

for(i=0;i<=n+1;i++)

maze[0][i]=1;

for(i=0;i<=m+1;i++)

maze[i][n+1]=1;

for(i=0;i<=n+1;i++)

maze[m+1][i]=1; //建立迷宫周围的墙;

cout<<"********************************************************************************\n"<<endl;

cout<<"    ☆ 自动生成迷宫 请按:1\n    ☆ 手动生成迷宫 请按:2\n"<<endl;

cout<<"********************************************************************************\n"<<endl;

cin>>s;

if(s=="1")

{

//srand(time(0)); //系统时间随机函数;

for(i=1;i<=m;i++)

for(j=1;j<=n;j++)

//maze[i][j]=rand()%2; //随机赋值

maze[1][1]=0; //(1,1)点为可通过点;

maze[m][n]=0; //(m,n)点为可通过点;

}

else

{

cout<<"请输入迷宫:"<<m<<"行"<<n<<"列"<<", 输入必须为'0' 或 '1';"<<endl;

for(i=1;i<=m;i++) //输入第i行迷宫的构造;

for(j=1;j<=n;j++) //输入第j列迷宫的结构;

{

cin>>maze[i][j];

A:if(maze[i][j]!=0 && maze[i][j]!=1)

{

cout<<"请再次输入:";

cin>>maze[i][j];goto A; //判错;

}

}

}

cout<<"迷宫如下:"<<endl; //显示用户输入的迷宫;

for(i=0;i<=m+1;i++)

{

for(j=0;j<=n+1;j++)

{

if (*(maze[i]+j)==0||*(maze[i]+j)==5)

{

cout<<" ";

}

else if(*(maze[i]+j)==1)

{

cout<<"□";

}

else if(*(maze[i]+j)==2)

{

cout<<"※";

}

else if(*(maze[i]+j)==3)

{

cout<<"■";

}

else if(*(maze[i]+j)==4)

{

cout<<"☆";

}

else if(*(maze[i]+j)==6) //找到出口标识

{

cout<<"★";

}

else

{

cout<<"出错!";

}

}

cout<<"\n";

}

H:cout<<"请输入迷宫入口(a,b),出口(c,d):";

cin>>i>>j>>c>>d;

path(maze,i,j,c,d); //调用路径函数,输出路径;

cout<<endl; //格式设置;

restore(maze,m,n); //恢复迷宫;

path1(maze,m,n,i,j,c,d); //输出最短路径;

cout<<endl; //格式设置;

cout<<"********************************************************************************\n";

cout<<"    1、寻找其他入口与出口;\n    2、退出此迷宫;\n";

cout<<"********************************************************************************\n";

cin>>l;

if(l==1){

restore(maze,m,n); //恢复迷宫;

goto H;

}

else return; //跳出此函数;

}

int main()

{

string s="Y";

do

{

cout<<"--------------------------欢迎到达迷宫界面--------------------------\n";

printpath();

cout<<endl;

cout<<"\n 是否继续?'Y' 或'N'(输入其他操作按'N')"<<endl;

cin>>s;

}while (s=="Y"||s=="y");

system("pause");

}

0
张月柔
张月柔
初级守护
初级守护
GoTo(STARTX + 4, STARTY + 2);

    printf("-------------------  贪吃蛇游戏  -------------------");

    GoTo(STARTX + 10, STARTY + 4);

    printf("制作人: ");

    GoTo(STARTX + 10, STARTY + 6);

    printf("ZYR");

    GoTo(STARTX + 10,STARTY + 8);

    printf("贪吃蛇游戏");

    GoTo(STARTX + 10,STARTY + 10);

    printf("游戏规则:");

    GoTo(STARTX + 10,STARTY + 12);

    printf("请按 ↑ ↓ ← →  来控制您的蛇吃东西");

    GoTo(STARTX + 10,STARTY + 14);

    printf("吃的越多,蛇就越长,您的等级也将越高");

    GoTo(STARTX + 10,STARTY + 16);

    printf("当蛇吃到自己或撞上墙时,游戏结束。");

 

0
张睿杰
张睿杰
初级天翼
初级天翼

为什么要加上我啊,我有游戏群你要不要账号

527440157

QQ

0
0
0
李汉魁
李汉魁
中级光能
中级光能

你这是要人家发整段代码!

0
0
黄俊博
黄俊博
资深光能
资深光能

@梁彦博,可以发吗??

0
周天睿
周天睿
初级光能
初级光能

梁彦博说可以发整段代码

周天睿在2018-02-08 18:19:33追加了内容

仅限这个类型的题目

0
0
储金洋
储金洋
新手光能
新手光能

#include<iostream>
#include<dirent.h>
#include<sys/stat.h>
#include<conio.h>
#include<cstdio>
#include<iomanip>
#include<time.h>
#include<windows.h>
using namespace std;
HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);
void gotoxy(HANDLE hout, const int X, const int Y)
{
    COORD coord;
    coord.X = X;
    coord.Y = Y;
    SetConsoleCursorPosition(hout,coord);
}
void setcolor(HANDLE hout, const int bg_color, const int fg_color)
{
    SetConsoleTextAttribute(hout, bg_color*16+fg_color);
}
void basic_structure()
{

    cout<<"简单游戏规则:上为翻转,左右移动,下为加速"<<endl;
    cout<<"每次消去X行,则等级加X,分数加X的平方,下降速度提高";
    setcolor(hout,0,11);
    gotoxy(hout,2,10);
    cout<<"SCORE";
    gotoxy(hout,2,20);
    cout<<"LEVEL";
    gotoxy(hout,50,10);
    cout<<"NEXT";
    setcolor(hout,0,9);
    gotoxy(hout,3,11);
    cout<<"0";
    gotoxy(hout,3,21);
    cout<<"1";
    setcolor(hout,0,10);
    gotoxy(hout,13,5);
    cout<<"┏━━━━━━━━━━━━━┓";
    int i;
    for(i=0;i<23;i++){
        gotoxy(hout,13,6+i);
        cout<<"┃                          ┃";
    }
    gotoxy(hout,13,29);
    cout<<"┗━━━━━━━━━━━━━┛"<<endl;
}
const int coord[28][4][4]=
{{1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0},
 {1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0},{1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0},{1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0},
 {0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0},{0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0},{1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
 {0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0},{1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0},{1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0},
 {0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0},{0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0},{1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0},
 {1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0},{1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0},{1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0},
 {1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0},{1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0},{0,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0},
 {1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0},{1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0},{1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0},//这一行的三个和第一个形状一样
 {1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0},{1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0},{1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0},
 {0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0},{0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0},{1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0}};
int xy[23][13]={0},color[23][13]={0},level=1,score=0,shape_num1,shape_num2,color1,color2,square_x,square_y,i,k;
char key1,key2;
void print_next(int n,int c)
{
    for(i=0;i<4;i++){
        gotoxy(hout,50,12+i);
        for(k=0;k<4;k++){
            if(coord[n][i][k]){
                setcolor(hout,0,c);
                cout<<"◎";
            }
            else{
                setcolor(hout,0,0);
                cout<<"  ";
            }
        }
    }
}
void left(int s,int c)
{
    for(i=0;i<4;i++){
        for(k=0;k<4;k++){
            if(coord[s][i][k]){
                if(square_y+k==0||xy[square_x+i][square_y+k-1])
                    goto L;
                break;
            }
        }
    }
    for(i=0;i<4;i++)
        for(k=0;k<4;k++)
            if(coord[s][i][k]){
                xy[square_x+i][square_y+k]=0;
                color[square_x+i][square_y+k]=0;
            }
    square_y-=1;
    for(i=0;i<4;i++)
        for(k=0;k<4;k++)
            if(coord[s][i][k]){
                xy[square_x+i][square_y+k]=1;
                color[square_x+i][square_y+k]=c;
            }
   L:
       ;
}
void right(int s,int c)
{
    for(i=0;i<4;i++){
        for(k=3;k>=0;k--){
            if(coord[s][i][k]){
                if(square_y+k==12||xy[square_x+i][square_y+k+1])
                    goto L;
                break;
            }
        }
    }
    for(i=0;i<4;i++)
        for(k=0;k<4;k++)
            if(coord[s][i][k]){
                xy[square_x+i][square_y+k]=0;
                color[square_x+i][square_y+k]=0;
            }
    square_y+=1;
    for(i=0;i<4;i++)
        for(k=0;k<4;k++)
            if(coord[s][i][k]){
                 xy[square_x+i][square_y+k]=1;
                 color[square_x+i][square_y+k]=c;
            }
   L:
       ;
}
int up(int &s,int c)
{
    if(s==1||s==3||s==5||s==7||s==8||s==9||s==11||s==12||s==13||s==15||s==16||s==17||s==22||s==24||s==26){
        for(i=0;i<4;i++)
            for(k=0;k<4;k++)
                if(coord[s][i][k]==0&&coord[s+1][i][k]==1){
                    if(xy[square_x+i][square_y+k])
                        return 0;
                }
        for(i=0;i<4;i++)
            for(k=0;k<4;k++){
                if(coord[s][i][k]==0&&coord[s+1][i][k]==1){
                    xy[square_x+i][square_y+k]=1;
                    color[square_x+i][square_y+k]=c;
                }
                else if(coord[s][i][k]==1&&coord[s+1][i][k]==0){
                    xy[square_x+i][square_y+k]=0;
                    color[square_x+i][square_y+k]=0;
                }
            }
        s+=1;
    }
    else if(s==2||s==4||s==6||s==23||s==25||s==27){
        for(i=0;i<4;i++)
            for(k=0;k<4;k++)
                if(coord[s][i][k]==0&&coord[s-1][i][k]==1)
                    if(xy[square_x+i][square_y+k])
                        return 0;
        for(i=0;i<4;i++)
            for(k=0;k<4;k++){
                if(coord[s][i][k]==0&&coord[s-1][i][k]==1){
                    xy[square_x+i][square_y+k]=1;
                    color[square_x+i][square_y+k]=c;
                }
                else if(coord[s][i][k]==1&&coord[s-1][i][k]==0){
                    xy[square_x+i][square_y+k]=0;
                    color[square_x+i][square_y+k]=0;
                }
            }
        s-=1;
    }
    else if(s==10||s==14||s==18){
        for(i=0;i<4;i++)
            for(k=0;k<4;k++)
                if(coord[s][i][k]==0&&coord[s-3][i][k]==1)
                    if(xy[square_x+i][square_y+k])
                        return 0;
        for(i=0;i<4;i++)
            for(k=0;k<4;k++){
                if(coord[s][i][k]==0&&coord[s-3][i][k]==1){
                    xy[square_x+i][square_y+k]=1;
                    color[square_x+i][square_y+k]=c;
                }
                else if(coord[s][i][k]==1&&coord[s-3][i][k]==0){
                    xy[square_x+i][square_y+k]=0;
                    color[square_x+i][square_y+k]=0;
                }
            }
        s-=3;
    }
    return 1;
}
int down(int s,int c)
{
    for(k=0;k<4;k++)
        for(i=3;i>=0;i--)
            if(coord[s][i][k]){
                if(square_x+i==22||xy[square_x+i+1][square_y+k])
                    return 0;
                break;
            }
    for(i=0;i<4;i++)
        for(k=0;k<4;k++)
            if(coord[s][i][k]){
                xy[square_x+i][square_y+k]=0;
                color[square_x+i][square_y+k]=0;
            }
    square_x+=1;
    for(i=0;i<4;i++)
        for(k=0;k<4;k++)
            if(coord[s][i][k]){
                xy[square_x+i][square_y+k]=1;
                color[square_x+i][square_y+k]=c;
            }
    return 1;
}
void Add_score()
{
    int h=0,bh;
    for(i=22;i>=0;i--){
        for(k=0;k<13;k++){
            if(xy[i][k]==0)
                break;
        }
        if(k==13){
            bh=i;
            h++;
        }
    }
    if(h){
        score+=h*h;
        level+=h;
        setcolor(hout,0,2);
        gotoxy(hout,3,11);
        cout<<score;
        gotoxy(hout,3,21);
        cout<<level;
        for(i=bh-1;i>=0;i--)
            for(k=0;k<13;k++){
                xy[i+h][k]=xy[i][k];
                color[i+h][k]=color[i][k];
            }
        for(i=0;i<h;i++)
            for(k=0;k<13;k++){
                xy[i][k]=0;
                color[i][k]=0;
            }
    }
}
int top()
{
    int i;
    for(i=0;i<13;i++)
        if(xy[0][i]==1)
            return 1;
    return 0;
}
void initial(int s,int c)
{
    for(i=0;i<4;i++)
        for(k=0;k<4;k++)
           if(coord[s][i][k]){
                xy[square_x+i][square_y+k]=1;
                color[square_x+i][square_y+k]=c;
           }
}
void all_print()
{
    for(i=0;i<23;i++){
        gotoxy(hout,15,6+i);
        for(k=0;k<13;k++){
            if(xy[i][k]){
                setcolor(hout,0,color[i][k]);
                cout<<"◎";
            }
            else{
                setcolor(hout,0,0);
                cout<<"  ";
            }
        }
    }
}
int main()
{
    char cmd[200];
    sprintf(cmd,"mode con cols=%d lines=%d",65,33);
    system(cmd);
    basic_structure();
    gotoxy(hout,0,33);setcolor(hout,0,7);
    shape_num1=rand()%28;
    color1=rand()%6+9;
    shape_num2=rand()%28;
    color2=rand()%6+9;
    int bottom;
    double start;
    while(top()==0){
        square_x=0;square_y=6;
        initial(shape_num1,color1);
        all_print();
        print_next(shape_num2,color2);
        bottom=1;
        while(bottom){
            start=clock();
            while(clock()-start<=1000.0/level&&!kbhit())
                ;
            if(kbhit()){
                key1=getch();
                if(key1==-32){
                    key2=getch();
                    if(key2=='H'){
                        i=up(shape_num1,color1);
                    }
                    else if(key2=='P'){
                        bottom=down(shape_num1,color1);
                        bottom=down(shape_num1,color1);
                    }
                    else if(key2=='K')
                        left(shape_num1,color1);
                    else if(key2=='M')
                        right(shape_num1,color1);
                }
            }
            else{
                bottom=down(shape_num1,color1);
            }
            all_print();
        }
        Add_score();
        all_print();
        shape_num1=shape_num2;
        color1=color2;
        shape_num2=rand()%28;
        color2=rand()%6+9;
    }
    gotoxy(hout,0,30);setcolor(hout,0,14);
    cout<<"-_-游戏结束-_-!"<<endl;
    setcolor(hout,0,7);
    return 0;
}

0
储金洋
储金洋
新手光能
新手光能


HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);
void gotoxy(HANDLE hout, const int X, const int Y)
{
    COORD coord;
    coord.X = X;
    coord.Y = Y;
    SetConsoleCursorPosition(hout,coord);
}
void setcolor(HANDLE hout, const int bg_color, const int fg_color)
{
    SetConsoleTextAttribute(hout, bg_color*16+fg_color);
}
void basic_structure()
{

    cout<<"简单游戏规则:上为翻转,左右移动,下为加速"<<endl;
    cout<<"每次消去X行,则等级加X,分数加X的平方,下降速度提高";
    setcolor(hout,0,11);
    gotoxy(hout,2,10);
    cout<<"SCORE";
    gotoxy(hout,2,20);
    cout<<"LEVEL";
    gotoxy(hout,50,10);
    cout<<"NEXT";
    setcolor(hout,0,9);
    gotoxy(hout,3,11);
    cout<<"0";
    gotoxy(hout,3,21);
    cout<<"1";
    setcolor(hout,0,10);
    gotoxy(hout,13,5);
    cout<<"┏━━━━━━━━━━━━━┓";
    int i;
    for(i=0;i<23;i++){
        gotoxy(hout,13,6+i);
        cout<<"┃                          ┃";
    }
    gotoxy(hout,13,29);
    cout<<"┗━━━━━━━━━━━━━┛"<<endl;
}
const int coord[28][4][4]=
{{1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0},
 {1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0},{1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0},{1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0},
 {0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0},{0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0},{1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
 {0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0},{1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0},{1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0},
 {0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0},{0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0},{1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0},
 {1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0},{1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0},{1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0},
 {1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0},{1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0},{0,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0},
 {1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0},{1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0},{1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0},//这一行的三个和第一个形状一样
 {1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0},{1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0},{1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0},
 {0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0},{0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0},{1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0}};
int xy[23][13]={0},color[23][13]={0},level=1,score=0,shape_num1,shape_num2,color1,color2,square_x,square_y,i,k;
char key1,key2;
void print_next(int n,int c)
{
    for(i=0;i<4;i++){
        gotoxy(hout,50,12+i);
        for(k=0;k<4;k++){
            if(coord[n][i][k]){
                setcolor(hout,0,c);
                cout<<"◎";
            }
            else{
                setcolor(hout,0,0);
                cout<<"  ";
            }
        }
    }
}
void left(int s,int c)
{
    for(i=0;i<4;i++){
        for(k=0;k<4;k++){
            if(coord[s][i][k]){
                if(square_y+k==0||xy[square_x+i][square_y+k-1])
                    goto L;
                break;
            }
        }
    }
    for(i=0;i<4;i++)
        for(k=0;k<4;k++)
            if(coord[s][i][k]){
                xy[square_x+i][square_y+k]=0;
                color[square_x+i][square_y+k]=0;
            }
    square_y-=1;
    for(i=0;i<4;i++)
        for(k=0;k<4;k++)
            if(coord[s][i][k]){
                xy[square_x+i][square_y+k]=1;
                color[square_x+i][square_y+k]=c;
            }
   L:
       ;
}
void right(int s,int c)
{
    for(i=0;i<4;i++){
        for(k=3;k>=0;k--){
            if(coord[s][i][k]){
                if(square_y+k==12||xy[square_x+i][square_y+k+1])
                    goto L;
                break;
            }
        }
    }
    for(i=0;i<4;i++)
        for(k=0;k<4;k++)
            if(coord[s][i][k]){
                xy[square_x+i][square_y+k]=0;
                color[square_x+i][square_y+k]=0;
            }
    square_y+=1;
    for(i=0;i<4;i++)
        for(k=0;k<4;k++)
            if(coord[s][i][k]){
                 xy[square_x+i][square_y+k]=1;
                 color[square_x+i][square_y+k]=c;
            }
   L:
       ;
}
int up(int &s,int c)
{
    if(s==1||s==3||s==5||s==7||s==8||s==9||s==11||s==12||s==13||s==15||s==16||s==17||s==22||s==24||s==26){
        for(i=0;i<4;i++)
            for(k=0;k<4;k++)
                if(coord[s][i][k]==0&&coord[s+1][i][k]==1){
                    if(xy[square_x+i][square_y+k])
                        return 0;
                }
        for(i=0;i<4;i++)
            for(k=0;k<4;k++){
                if(coord[s][i][k]==0&&coord[s+1][i][k]==1){
                    xy[square_x+i][square_y+k]=1;
                    color[square_x+i][square_y+k]=c;
                }
                else if(coord[s][i][k]==1&&coord[s+1][i][k]==0){
                    xy[square_x+i][square_y+k]=0;
                    color[square_x+i][square_y+k]=0;
                }
            }
        s+=1;
    }
    else if(s==2||s==4||s==6||s==23||s==25||s==27){
        for(i=0;i<4;i++)
            for(k=0;k<4;k++)
                if(coord[s][i][k]==0&&coord[s-1][i][k]==1)
                    if(xy[square_x+i][square_y+k])
                        return 0;
        for(i=0;i<4;i++)
            for(k=0;k<4;k++){
                if(coord[s][i][k]==0&&coord[s-1][i][k]==1){
                    xy[square_x+i][square_y+k]=1;
                    color[square_x+i][square_y+k]=c;
                }
                else if(coord[s][i][k]==1&&coord[s-1][i][k]==0){
                    xy[square_x+i][square_y+k]=0;
                    color[square_x+i][square_y+k]=0;
                }
            }
        s-=1;
    }
    else if(s==10||s==14||s==18){
        for(i=0;i<4;i++)
            for(k=0;k<4;k++)
                if(coord[s][i][k]==0&&coord[s-3][i][k]==1)
                    if(xy[square_x+i][square_y+k])
                        return 0;
        for(i=0;i<4;i++)
            for(k=0;k<4;k++){
                if(coord[s][i][k]==0&&coord[s-3][i][k]==1){
                    xy[square_x+i][square_y+k]=1;
                    color[square_x+i][square_y+k]=c;
                }
                else if(coord[s][i][k]==1&&coord[s-3][i][k]==0){
                    xy[square_x+i][square_y+k]=0;
                    color[square_x+i][square_y+k]=0;
                }
            }
        s-=3;
    }
    return 1;
}
int down(int s,int c)
{
    for(k=0;k<4;k++)
        for(i=3;i>=0;i--)
            if(coord[s][i][k]){
                if(square_x+i==22||xy[square_x+i+1][square_y+k])
                    return 0;
                break;
            }
    for(i=0;i<4;i++)
        for(k=0;k<4;k++)
            if(coord[s][i][k]){
                xy[square_x+i][square_y+k]=0;
                color[square_x+i][square_y+k]=0;
            }
    square_x+=1;
    for(i=0;i<4;i++)
        for(k=0;k<4;k++)
            if(coord[s][i][k]){
                xy[square_x+i][square_y+k]=1;
                color[square_x+i][square_y+k]=c;
            }
    return 1;
}
void Add_score()
{
    int h=0,bh;
    for(i=22;i>=0;i--){
        for(k=0;k<13;k++){
            if(xy[i][k]==0)
                break;
        }
        if(k==13){
            bh=i;
            h++;
        }
    }
    if(h){
        score+=h*h;
        level+=h;
        setcolor(hout,0,2);
        gotoxy(hout,3,11);
        cout<<score;
        gotoxy(hout,3,21);
        cout<<level;
        for(i=bh-1;i>=0;i--)
            for(k=0;k<13;k++){
                xy[i+h][k]=xy[i][k];
                color[i+h][k]=color[i][k];
            }
        for(i=0;i<h;i++)
            for(k=0;k<13;k++){
                xy[i][k]=0;
                color[i][k]=0;
            }
    }
}
int top()
{
    int i;
    for(i=0;i<13;i++)
        if(xy[0][i]==1)
            return 1;
    return 0;
}
void initial(int s,int c)
{
    for(i=0;i<4;i++)
        for(k=0;k<4;k++)
           if(coord[s][i][k]){
                xy[square_x+i][square_y+k]=1;
                color[square_x+i][square_y+k]=c;
           }
}
void all_print()
{
    for(i=0;i<23;i++){
        gotoxy(hout,15,6+i);
        for(k=0;k<13;k++){
            if(xy[i][k]){
                setcolor(hout,0,color[i][k]);
                cout<<"◎";
            }
            else{
                setcolor(hout,0,0);
                cout<<"  ";
            }
        }
    }
}
int main()
{
    char cmd[200];
    sprintf(cmd,"mode con cols=%d lines=%d",65,33);
    system(cmd);
    basic_structure();
    gotoxy(hout,0,33);setcolor(hout,0,7);
    shape_num1=rand()%28;
    color1=rand()%6+9;
    shape_num2=rand()%28;
    color2=rand()%6+9;
    int bottom;
    double start;
    while(top()==0){
        square_x=0;square_y=6;
        initial(shape_num1,color1);
        all_print();
        print_next(shape_num2,color2);
        bottom=1;
        while(bottom){
            start=clock();
            while(clock()-start<=1000.0/level&&!kbhit())
                ;
            if(kbhit()){
                key1=getch();
                if(key1==-32){
                    key2=getch();
                    if(key2=='H'){
                        i=up(shape_num1,color1);
                    }
                    else if(key2=='P'){
                        bottom=down(shape_num1,color1);
                        bottom=down(shape_num1,color1);
                    }
                    else if(key2=='K')
                        left(shape_num1,color1);
                    else if(key2=='M')
                        right(shape_num1,color1);
                }
            }
            else{
                bottom=down(shape_num1,color1);
            }
            all_print();
        }
        Add_score();
        all_print();
        shape_num1=shape_num2;
        color1=color2;
        shape_num2=rand()%28;
        color2=rand()%6+9;
    }
    gotoxy(hout,0,30);setcolor(hout,0,14);
    cout<<"-_-游戏结束-_-!"<<endl;
    setcolor(hout,0,7);
    return 0;
}

0
0
0
0
0
我要回答