zoukankan      html  css  js  c++  java
  • 双人贪吃蛇小游戏C++原创

    大家好,我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang

    /*贪吃蛇*/
    #include<stdio.h>
    #include<time.h>
    #include<conio.h>
    #include<stdlib.h>
    #include<windows.h>
     
    char qipan[20][80];
    int snake = 1;
     
    int change(int *head, int *tail, int *score, char *direction, int zuobiao[2][80])
    {
        int x, y;
    switch(*direction)
    {
            case 72:
                x = zuobiao[0][*head]-1;
                y = zuobiao[1][*head];
                break;
            case 87:
                x = zuobiao[0][*head]-1;
                y = zuobiao[1][*head];
                break;
            case 80:
                x = zuobiao[0][*head]+1;
                y = zuobiao[1][*head];
                break;
            case 83:
                x = zuobiao[0][*head]+1;
                y = zuobiao[1][*head];
                break;
            case 75:
                x = zuobiao[0][*head];
                y = zuobiao[1][*head]-1;
                break;
            case 65:
                x = zuobiao[0][*head];
                y = zuobiao[1][*head]-1;
                break;
            case 68:
                x = zuobiao[0][*head];
                y = zuobiao[1][*head]+1;
                break;
        default:
                x = zuobiao[0][*head];
                y = zuobiao[1][*head]+1;
    }
    if(qipan[x][y] == '_' || qipan[x][y] == '|' || qipan[x][y] == '*')
    return 1;
        if(qipan[x][y] == ' ')
        {
            qipan[zuobiao[0][*tail]][zuobiao[1][*tail]]=' ';
            *tail=(*tail+1)%80;
            qipan[zuobiao[0][*head]][zuobiao[1][*head]]='*';
            *head=(*head+1)%80;
            zuobiao[0][*head]=x;
            zuobiao[1][*head]=y;
            qipan[x][y]='#';
            return 0;
        }
        if(qipan[x][y] == '@')
        {
            qipan[zuobiao[0][*head]][zuobiao[1][*head]]='*';
            *head=(*head+1)%80;
            zuobiao[0][*head]=x;
            zuobiao[1][*head]=y;
            qipan[x][y]='#';
            *score += 1;
            return 0;
        }
    }
    void gotoxy(int x,int y)//位置函数
    {
    COORD pos;
     
    pos.X=x;
     
    pos.Y=y;
     
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
    }
    void color(int a)//颜色函数
    {
     
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
     
    }
    void show_start()
    {
     
        gotoxy(20,0);
        color(1);
        int u;
        for(u = 0; u < 18; u ++)
            printf("* ");
        gotoxy(20, 12);
        for(u = 0; u < 18; u ++)
            printf("* ");
        gotoxy(28,2);
        color(13);
        printf("S N A K E  G A M E");
        gotoxy(31, 5);
        color(14);
        printf("#");
        gotoxy(34, 5);
        color(11);
        printf("One  snake");
        gotoxy(34, 7);
        printf("Two  snakes");
        gotoxy(28,9);
        printf("The speed you want: ");
     
        gotoxy(31, 5);
        char temp = 'a';
        color(14);
        while(1)
        {
            while(!kbhit());
            temp = getch();
            if(temp == 72 || temp == 80)
            {
                gotoxy(31,5+2*(snake-1));
                printf(" ");
                snake = snake % 2 + 1;
                gotoxy(31,5+2*(snake-1));
                printf("#");
                gotoxy(31,5+2*(snake-1));
            }
            if(temp == 13)
                break;
        }
     
        gotoxy(27,10);
        color(10);
        printf("GOOD  LUCK  TO  YOU  !");
    }
     
     
     
     
     
     
    int main()
    {
        srand(time(0));
     
        int head1 = 3, tail1 = 0, score1 = 0;
        int head2 = 3, tail2 = 0, score2 = 0;
        int zuobiao1[2][80];
        int zuobiao2[2][80];
     
        /*棋盘 20×80 初始化*/
    for(int i = 0; i < 20; i++)
        {
            for(int j = 0; j < 80; j++)
            {
                qipan[i][j] = ' ';
            }
        }
        for(int i = 0; i < 20; i++)
        {
            qipan[i][0] = qipan[i][79] = '|';//第一列、最后一列是墙20*1
        }
        for(int i = 0; i < 80; i++)
        {
            qipan[0][i] = qipan[19][i] = '_';//第一行、最后一行是墙1*80
        }
     
        /*蛇的坐标 2×8 初始化, 将蛇放到棋盘上*/
        int x1 = 1, x2 = 18, y, temp = 0;
     
        for(int m = tail1; m < head1; m++)
        {
            zuobiao1[0][m] = x1;//初始行号
            y = zuobiao1[1][m] = ++temp;//初始列号
            qipan[x1][y] = '*';
        }
        zuobiao1[0][head1] = x1;//初始行号
        y = zuobiao1[1][head1] = ++temp;//初始列号
        qipan[x1][y] = '#';//蛇头
     
        show_start();
     
        if(snake == 2)
        {
            temp = 0;
            for(int m = tail2; m < head2; m++)
            {
                zuobiao2[0][m] = x2;//初始行号
                y = zuobiao2[1][m] = ++temp;//初始列号
                qipan[x2][y] = '*';
            }
            zuobiao2[0][head2] = x2;//初始行号
            y = zuobiao2[1][head2] = ++temp;//初始列号
            qipan[x2][y] = '#';//蛇头
        }
     
        clock_t start;
    int timeover;
    char direction1 = 77;//72 88 75 77
    char direction2 = 68;//87 83 65 68
        char new_direction;
        char new_direction1 ;
        char new_direction2 ;
     
    int gamespeed;
    gotoxy(48, 9);
    color(14);
    scanf("%d", &gamespeed);
        int rand_i = rand()%18 + 1;
        int rand_j = rand()%78 + 1;
        qipan[rand_i][rand_j] = '@';
     
        system("cls");
        gotoxy(10, 1);
        color(10);
        printf("Your present score: ");
        gotoxy(30, 1);
        color(11);
        printf("%d", score1);
        gotoxy(0,4);
        for(int i = 0; i < 20; i++)//打印出棋盘
            for(int j = 0; j < 80; j++)
            {
                if(qipan[i][j] == '*' || qipan[i][j] == '#')
                    color(13);
                else if(qipan[i][j] == '@')
                    color(12);
                else
                    color(15);
                    printf("%c", qipan[i][j]);
            }
        while(1)//87 83 65 68
        {
            for(int i = 0; i < 20; i++)//打印出棋盘
                for(int j = 0; j < 80; j++)
                {
                    if(qipan[i][j] == '*' || qipan[i][j] == '#')
                    {
                        gotoxy(j, i+4);
                        color(13);
                    }
                    if(qipan[i][j] == '@')
                    {
                        gotoxy(j, i+4);
                        color(12);
                    }
                    if(qipan[i][j] == '_' || qipan[i][j] == '|')
                    {
                        gotoxy(j, i+4);
                        color(15);
                    }
                    printf("%c", qipan[i][j]);
                }
            for(int q = 0; q < 3; q++)
            {
                gotoxy(rand()%78 + 1, rand()%18 + 5 );
                color(14);
                printf("+");
            }
            start = clock();
            timeover = 1;
            while(!kbhit() && (timeover = clock() - start/CLOCKS_PER_SEC <= gamespeed));
            if(timeover)//有按键
            {
                if(snake == 1)
                    getch();
                new_direction = getch();
                if(snake == 2)
                {
                    if(new_direction == 87 || new_direction ==83 ||new_direction == 65||new_direction == 68)
                    {
                        new_direction2 = new_direction;
                        new_direction1 = direction1;
                        if(new_direction2 + direction2 == 170 || new_direction2 + direction2 == 133)
                        {
                            change(&head1, &tail1, &score1, &direction1, zuobiao1);
                            change(&head2, &tail2, &score2, &direction2, zuobiao2);
                            continue;
                        }
                    }
                    if(new_direction == 72 || new_direction ==80 ||new_direction == 75||new_direction == 77)
                    {
                        new_direction1 = new_direction;
                        new_direction2 = direction2;
                        if(new_direction1 + direction1 == 152)
                        {
                            change(&head1, &tail1, &score1, &direction1, zuobiao1);
                            change(&head2, &tail2, &score2, &direction2, zuobiao2);
                            continue;
                        }
                    }
                }
                if(snake == 1 && (new_direction == 72 || new_direction ==80 ||new_direction == 75||new_direction == 77))
                {
                    new_direction1 = new_direction;
                    if(new_direction1 + direction1 == 152)
                    {
                        change(&head1, &tail1, &score1, &direction1, zuobiao1);
                        continue;
                    }
                }
            }
            else
            {
                if(snake == 2)
                {
                        new_direction2 = direction2;
                        new_direction1 = direction1;
                }
                else
                {
                    new_direction1 = direction1;
                }
            }
            if(snake == 1)
            {
                direction1 = new_direction1;
                if(change(&head1, &tail1, &score1, &direction1, zuobiao1) == 1)
                {
                    system("cls");
                    gotoxy(30,10);
                    color(7);
                    printf("G A M E  O V E R !");
                    gotoxy(0,20);
                    color(1);
                    return 0;
                }
            }
            if(snake == 2)
            {
                direction1 = new_direction1;
                if(change(&head1, &tail1, &score1, &direction1, zuobiao1) == 1)
                {
                    system("cls");
                    gotoxy(30,8);
                    color(7);
                    printf("G A M E  O V E R !");
                    gotoxy(30,10);
                    printf("Snake Two is the Hero!");
                    gotoxy(0,20);
                    color(1);
                    return 0;
                }
     
                direction2 = new_direction2;
                if(change(&head2, &tail2, &score2, &direction2, zuobiao2) == 1)
                {
                    system("cls");
                    gotoxy(30,8);
                    color(7);
                    printf("G A M E  O V E R !");
                    gotoxy(30,10);
                    printf("Snake One is the Hero!");
                    gotoxy(0,20);
                    color(1);
                    return 0;
                }
     
            }
     
            int randnew = 0;
            for(int i = 0; i < 20; i++)//打印出棋盘
                for(int j = 0; j < 80; j++)
                    if(qipan[i][j] == '@')
                    {
                        randnew ++;
                    }
            if(randnew == 0)
            {
                rand_i = rand()%18 + 1;
                rand_j = rand()%78 + 1;
                qipan[rand_i][rand_j] = '@';
            }
            if(snake == 2 && randnew == 1)
            {
                rand_i = rand()%18 + 1;
                rand_j = rand()%78 + 1;
                qipan[rand_i][rand_j] = '@';
            }
     
            gotoxy(30, 1);
            printf("%d", score1);
            if(snake == 2)
            {
                gotoxy(30,2);
                printf("%d", score2);
            }
        }
    }
  • 相关阅读:
    大数据课上用spark
    Python 机器学习及实践 Codeing 模型实用技巧 (特征提升 模型正则化 模型检测 超参数搜索)
    学习网站保存
    Tensorflow + Keras 深度学习人工智能实践应用 Linux Ubuntu 中 安装Tensroflow 与 Keras
    卡尔曼滤波的总结
    MATLAB在一张图上画出多条曲线
    数据库的索引和优化
    线程进程
    static关键字
    单例模式
  • 原文地址:https://www.cnblogs.com/xiaoyajiang/p/5950310.html
Copyright © 2011-2022 走看看