一个好玩的小游戏(纯C语言编写)

最近在看知乎是发现了一个这一个专栏
https://zhuanlan.zhihu.com/c2game
从中获取的许多知识,本文中的游戏也是从里面学到的,不过本人又自己加了一些功能。
这是一个类似于飞机大战的游戏,不过目前代码量比较小,所以看起来非常简陋游戏界面如下
更新日志,本人将原来的原来的代码有进一步的优化了一下,之前是只有一个非常小的战机现在更新后可以产生一个非常大的战机(看起来也更有气势了~~)和敌人的战机,不过死亡的判定条件和边境的判断条件还没有做好,等下次再继续加油。2017.3.12更新
就是这样一个简陋的游戏(实在惭愧,本人目前能力有限)
如下图:
这里写图片描述
完整的代码如下:

#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 <= 1000; 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("\n");
    }
    printf("\n你的得分:%d\n\n", score);
    printf("操作说明: ASDW分别操作 左下右上四个的移动\n");
    printf("**空格是发出子弹**\n");
}
int main()
{
    starup();
    while (1)
    {
        HideCursor();
        startMap();
        show();
        updateWithoutInput();
        updateWithInput();
    }
    return 0;
}

注意107行和109行的kbhit()和getch()
如果你看不明白,我建议你先去上面的那个连接中看看,他会教你如何一步步的进行最后做成一个完整的游戏。

  • 306
    点赞
  • 1499
    收藏
    觉得还不错? 一键收藏
  • 100
    评论
### 回答1: 这是一个比较通用的方法来编写一个小游戏用 C 语言: 1. 首先,确定游戏的目标和规则。这可能包括游戏的玩法、胜负条件、游戏元素和游戏流程等。 2. 其次,确定游戏的用户界面。这可能包括游戏的菜单、按钮、文本框、图像和其他元素,以及如何显示这些元素并响应用户输入。 3. 然后,设计游戏的数据结构和算法。这可能包括游戏状态、游戏元素的位置和状态、分数和其他游戏变量,以及如何更新这些变量并实现游戏规则。 4. 最后,实现游戏的代码。这可能包括初始化游戏、绘制游戏界面、更新游戏状态、处理用户输入、结束游戏等。 注意:这只是一个大致的指导方针,实际的游戏开发过程可能会有所不同。 ### 回答2: 我使用C语言编写一个经典的文本冒险小游戏。游戏的基本思路是玩家需要在一个虚拟的迷宫中探索并寻找出口。 游戏开始时,玩家将在迷宫的入口处开始。玩家可以通过输入命令来控制角色的移动,例如"w"表示向上移动,"s"表示向下移动,"a"表示向左移动,"d"表示向右移动。玩家还可以输入"exit"命令来退出游戏。 迷宫的地图是一个二维数组,其中不同的字符表示不同的地形,例如"#"表示墙壁,"."表示通道。玩家只能穿过通道,不能穿过墙壁。玩家每移动一步,游戏就会更新地图并显示新的位置。 玩家需要通过探索每一个房间来找到通往下一个房间的出口。在某些房间中,玩家可能会遇到一些障碍物或陷阱,这些会耗费玩家的生命值。当玩家耗尽生命值时,游戏结束。 为了增加游戏的乐趣和挑战,我还添加了一些额外的功能。例如,玩家可以遇到一些隐藏的宝物,收集宝物可以得到额外的积分。另外,玩家还可以在特定地点使用道具,例如增加生命值或暂停敌人的移动。 整个游戏的开发过程涉及许多C语言编程的基本概念,例如循环结构、条件语句、函数等。通过编写这个小游戏,我巩固了自己对C语言的理解,并提高了自己的编程能力。 总而言之,使用C语言编写小游戏可以锻炼编程技能,提高逻辑思维能力,并为其他更复杂的游戏开发项目打下基础。 ### 回答3: C语言是一种功能强大的编程语言,也可以用来编写简单的小游戏。在编写游戏之前,我们首先需要了解游戏的基本要求和规则。下面是一个C语言编写的猜数字小游戏的示例: ```c #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int answer, guess, attempts; attempts = 0; // 生成随机数作为答案 srand(time(0)); answer = rand() % 100 + 1; printf("欢迎来到猜数字游戏!\n"); do { printf("请输入一个1到100之间的整数:"); scanf("%d", &guess); attempts++; if (guess > answer) { printf("猜错了,太大了!请再试一次。\n"); } else if (guess < answer) { printf("猜错了,太小了!请再试一次。\n"); } else { printf("恭喜你猜对了!答案是 %d。\n", answer); printf("你用了 %d 次尝试。\n", attempts); } } while (guess != answer); return 0; } ``` 在这个小游戏中,程序会生成一个1到100之间的随机数作为答案,然后玩家需要输入一个整数进行猜测。程序会根据猜测的结果给出相应的提示,直到玩家猜对为止。游戏结束时,程序会显示玩家猜对的次数。 这只是一个简单的示例,实际上可以用C语言实现更复杂的游戏。通过使用条件语句、循环和随机数等基本的编程概念,开发者可以创作出各种有趣的游戏。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值