zoukankan      html  css  js  c++  java
  • 双手奉上!一个好玩的小游戏(纯C语言编写)!

    效果演示


     

     

    源代码

    #include<stdio.h>
    
    #include<string.h>
    
    #include<conio.h>
    
    #include<windows.h>
    
    #include<stdlib.h>
    
    #define MAX 100
    
    long long int speed = 0;//控制敌机的速度
    
    int position_x, position_y;//飞机的所在位置
    
    int high, width;//地图的大小
    
    int bullet_x, bullet_y;//子弹的位置
    
    int enemy_x, enemy_y;//敌人的位置
    
    int map[MAX][MAX];
    
    /*0表示空白,1表示战机*的区域,2表示敌人战机的位置。
    
    3表示上下围墙,4表示左右围墙,5表示子弹的位置*/
    
    int score;
    
    void starup()//初始化所有的信息
    
    {
    
        high = 20;
    
        width = 30;
    
        position_x = high / 2;
    
        position_y = width / 2;
    
        bullet_x = 0;
    
        bullet_y = position_y;
    
        enemy_x = 2;
    
        enemy_y = position_y - 1;
    
        score = 0;
    
    }
    
    void startMap()
    
    {
    
        int i, j;
    
        for (i = 1; i <= high - 1; i++)
    
        {
    
            map[i][1] = 4;
    
            for (j = 2; j <= width - 1; j++)
    
                map[i][j] = 0;
    
            map[i][width] = 4;
    
        }
    
        //下方围墙的初始化
    
        i = high;
    
        for (j = 1; j <= width; j++)
    
            map[i][j] = 3;
    
        map[bullet_x][bullet_y] = 5;
    
        /*这里是战机大小的初始化开始*/
    
        map[position_x - 1][position_y] = 1;
    
        i = position_x;
    
        for (j = position_y - 2; j <= position_y + 2; j++)
    
            map[i][j] = 1;
    
        map[position_x + 1][position_y - 1] = 1;
    
        map[position_x + 1][position_y + 1] = 1;
    
        /***      初始化结束        **/
    
        /* 敌人战机的初始化 */
    
        map[enemy_x][enemy_y] = 2;
    
        map[enemy_x - 1][enemy_y - 1] = 2;
    
        map[enemy_x - 1][enemy_y + 1] = 2;
    
        /* 敌人战机初始化结束*/
    
    }
    
    void HideCursor()//隐藏光标
    
    {
    
        CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };
    
        SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
    
    }
    
    void gotoxy(int x, int y)//清理一部分屏幕
    
    {
    
        HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    
        COORD pos;
    
        pos.X = x;
    
        pos.Y = y;
    
        SetConsoleCursorPosition(handle, pos);
    
    }
    
    void updateWithoutInput()//于输入无关的跟新
    
    {
    
        if (bullet_x > 0)
    
            bullet_x--;
    
        if ((bullet_x == enemy_x) && (bullet_y == enemy_y))//当敌人的飞机被击中时
    
        {
    
            score++;
    
            enemy_x = 0;
    
            enemy_y = rand() % width;
    
            bullet_x = 0;
    
        }
    
        if (enemy_x > high)//当飞机超出区域
    
        {
    
            enemy_x = 0;
    
            enemy_y = rand() % width;
    
        }
    
        if (speed == 1)
    
            for (int i = 1; i <= 10000; i++)//用来控制敌机的速度
    
            {
    
                for (int j = 1; j <= 3000; j++)
    
                {
    
                    speed = 1;
    
                }
    
            }
    
        speed = 0;
    
        if (speed == 0)
    
        {
    
            enemy_x++;
    
            speed = 1;
    
        }
    
    }
    
    void updateWithInput()//与输入有关的更新
    
    {
    
        char input;
    
        if (kbhit())//在VC6.0++下,为_kbhit()
    
        {
    
            input = getch();//在VC6.0++下为_getch();
    
            if (input == 'a')
    
                position_y--;
    
            if (input == 's')
    
                position_x++;
    
            if (input == 'd')
    
                position_y++;
    
            if (input == 'w')
    
                position_x--;
    
            if (input == ' ')
    
            {
    
                bullet_x = position_x - 1;
    
                bullet_y = position_y;
    
            }
    
        }
    
    }
    
    void show()//展示的内容
    
    {
    
        gotoxy(0, 0);
    
        int i, j;
    
        for (i = 1; i <= high; i++)
    
        {
    
            for (j = 1; j <= width; j++)
    
            {
    
                if (map[i][j] == 0)
    
                    printf(" ");
    
                if (map[i][j] == 1)
    
                    printf("*");
    
                if (map[i][j] == 2)
    
                    printf("#");
    
                if (map[i][j] == 3)
    
                    printf("~");
    
                if (map[i][j] == 4)
    
                    printf("|");
    
                if (map[i][j] == 5)
    
                    printf("|");
    
            }
    
            printf("
    ");
    
        }
    
        printf("
    你的得分:%d
    
    ", score);
    
        printf("操作说明: ASDW分别操作 左下右上四个的移动
    ");
    
        printf("**空格是发出子弹**
    ");
    
    }
    
    int main()
    
    {
    
        starup();
    
        while (1)
    
        {
    
            HideCursor();
    
            startMap();
    
            show();
    
            updateWithoutInput();
    
            updateWithInput();
    
        }
    
        return 0;
    
    }

    —————————————

    关注我,参观更多源码项目!

    - End -

    —————————————

    不管你是转行也好,初学也罢,进阶也可,如果你想学编程,进阶程序员~

    【值得关注】我的 编 程 学 习 交 流 俱 乐 部 !【点击进入】

    C语言入门资料(网盘链接免费分享):


     

    C语言推荐书籍(PDF免费分享):


     
  • 相关阅读:
    求最低价格
    A*算法入门
    hdu 4715
    手动扩大栈内存,让AC无忧
    hdu 4710
    hdu 1698
    poj3468区间延迟更新模板题
    hdu 1059二进制优化背包问题
    2059龟兔赛跑
    水1276
  • 原文地址:https://www.cnblogs.com/huya-edu/p/15176213.html
Copyright © 2011-2022 走看看