C语言实现像素鸟游戏

本文实例为大家分享了C语言实现像素鸟游戏的具体代码,供大家参考,具体内容如下

在进入更复杂的学习之前,我们最后实现一个小游戏——像素鸟。

下落的小鸟

首先我们写好游戏代码框架并实现小鸟下落和上升(按空格)的功能:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <cwindow.h>

//全局变量
int high,width;    //画面尺寸
int bird_x,bird_y;    //小鸟坐标
int barl_y,barl_xTop,barl_xDowm;    //障碍物

void gotoxy(int x, int y)    //移动光标便于清屏重画
{
    HANDLE handle = GetStdHandle(STD_UOTPUT_HANDLE);
    CROOD pos;
    pos.X = x;
    pos.Y = y;
    SetConsoleCursorPosition(handle, pos);
}

void startup()        //数据初始化
{
    high = 15;
    width = 20;
    bird_x = 0;
    bird_y = width/3;
}

void show()        //显示画面
{
    gotoxy(0,0);
    int i,j;

    for(i=0; i<high; i++)
    {
        for(j=0; j<width; j++)
        {
            if((i==bird_x)&&(j==bird_y))
                printf("@");
            else
                printf(" ");
        }
        print("\n");    //每经一次行循环就换行
    }
}

void updateWithoutInput()
{
    bird_x ++;
    sleep(150);
}

void updateWithInput()
{
    char input;
    if(kbhit())    //判断是否有输入
    {
        input = getch();
        if(input==' ')
            bird_x = bird_x - 2;
    }
}

int main()
{
    startup();
    while(1)
    {
        show();
        updateWithoutInput();
        updateWithInput();
    }
    return 0;
}

显示障碍物

我们在上一步的基础上完成障碍物的绘制,使用全局变量barl_y, barl_xTop, barl_xDown描述相关量,如图:

加入以下代码片段:

数据初始化

barl_y = width/2;
barl_xDown = high/2;
barl_xTop = high/3;

输出循环

...
else if ((j==barl_y)&&((i>barl_xDown)||(i<barl_xTop)))
    printf("*");
...

障碍物移动(在updateWithoutInput里)

barl_y --;

判定碰撞

接下来判定当障碍物 y 坐标到达小鸟位置时是否有碰撞发生,若有,则游戏失败,反之则得分加一。

加入如下代码段:

int score; //全局变量,得分

void startup()
{
    ...
    score = 0;    
    ...
}

void updateWithoutInput()
{
    ...
    if(bird_y == barl_y)
    {
        if((bird_x>=barl_xTop)&&(bird_x<=barl_xDown))
            score ++;
        else 
        {
            printf("GG\n");
            system("pause");
            exit(0);
        }
    }
    ...
}

循环障碍物

到这里我们就要是障碍物循环出现,因为不管怎么样也不应该只有一个障碍物吧!同时,在此还将利用 rand() 随机障碍物空隙坐标。

加入以下代码段:

if(barl_y <= 0)
{
    barl_y = width;
    int temp =rand() % int(high * 0.8);    //使用临时变量储存障碍物坐标信息
    barl_xDown = temp + high/10;
    barl_xTop = temp - high/10;
}

这里对临时变量加减高度除以十的操作是为了防止生成新障碍物的空隙在太过边缘的位置。

小结

完整代码如下(我是打字机器):

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <cwindow.h>

//全局变量
int high,width;    //画面尺寸
int bird_x,bird_y;    //小鸟坐标
int barl_y,barl_xTop,barl_xDowm;    //障碍物
int score;         //得分

void gotoxy(int x, int y)    //移动光标便于清屏重画
{
    HANDLE handle = GetStdHandle(STD_UOTPUT_HANDLE);
    CROOD pos;
    pos.X = x;
    pos.Y = y;
    SetConsoleCursorPosition(handle, pos);
}

void startup()        //数据初始化
{
    high = 15;
    width = 20;
    score = 0;    
    bird_x = 0;
    bird_y = width/3;
    barl_y = width/2;
    barl_xDown = high/2;
    barl_xTop = high/3;
}

void show()        //显示画面
{
    gotoxy(0,0);
    int i,j;

    for(i=0; i<high; i++)
    {
        for(j=0; j<width; j++)
        {
            if((i==bird_x)&&(j==bird_y))
                printf("@");
            else if ((j==barl_y)&&((i>barl_xDown)||(i<barl_xTop)))
                printf("*");
            else
                printf(" ");
        }
        print("\n");    //每经一次行循环就换行
    }
}

void updateWithoutInput()
{
    bird_x ++;
    barl_y --;
    if(bird_y == barl_y)
    {
        if((bird_x>=barl_xTop)&&(bird_x<=barl_xDown))
            score ++;
        else 
        {
            printf("GG\n");
            system("pause");
            exit(0);
        }
    }
    if(barl_y <= 0)
    {
        barl_y = width;
        int temp =rand() % int(high * 0.8);    //使用临时变量储存障碍物坐标信息
        barl_xDown = temp + high/10;
        barl_xTop = temp - high/10;
    }
    sleep(150);
}

void updateWithInput()
{
    char input;
    if(kbhit())    //判断是否有输入
    {
        input = getch();
        if(input==' ')
            bird_x = bird_x - 2;
    }
}

int main()
{
    startup();
    while(1)
    {
        show();
        updateWithoutInput();
        updateWithInput();
    }
    return 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言实现简单的飞机大战游戏

    目录 一.项目描述和最终的成果展示 二.输出一个飞机模型 三.实现控制飞机移动的功能 四.添加发射激光功能 五.添加靶子和分数统计功能 本文实例为大家分享了C语言实现简单飞机大战游戏的具体代码,供大家参考,具体内容如下 一.项目描述和最终的成果展示 项目描述: 显示出一个飞机,并可以控制移动,发出激光,打靶练习. 效果展示: 二.输出一个飞机模型 先输出一个飞机模型.后面再进一步完成控制飞机的功能. 代码如下: //输出飞机图案 #include<stdio.h> #include<st

  • C语言实现打砖块小游戏

    本文实例为大家分享了C语言实现打砖块游戏的具体代码,供大家参考,具体内容如下 本节我们将沿用 上一节 所提到的函数式游戏框架来写一个弹球打砖块的游戏. 基本量.边框绘制 我们首先定义好可能需要的变量,比如小球坐标以及速度.游戏界面高度和宽度等等,然后再根据之前提到的弹跳小球重构代码,剩下的内容再分步添置即可. #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <cwindow.h&

  • C语言实现的猜拳游戏代码分享

    这是一个简单的猜拳游戏(剪子包子锤),让你与电脑对决.你出的拳头由你自己决定,电脑则随机出拳,最后判断胜负. 下面的代码会实现一个猜拳游戏,让你与电脑对决.你出的拳头由你自己决定,电脑则随机出拳,最后判断胜负. 启动程序后,让用户出拳,截图: 用户出拳,显示对决结果:截图: 代码实现: #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { char gamer; // 玩家出拳 int

  • C语言实现空战游戏

    本文实例为大家分享了C语言实现空战游戏的具体代码,供大家参考,具体内容如下 一.项目描述和成果展示 项目描述:   在以往的程序中进行了改进.例如:   可以发射多个子弹        可以有多个敌机 飞机大战 1.0版飞机大战 2.0版 现在这个版本是3.0版 这个版本的各个功能基本完善 效果图如下: 二.发射多个子弹 代码如下: #include<stdio.h> #include<string.h> #include<conio.h> #include<Wi

  • C语言实现简单猜拳小游戏

    C语言实现简单的一个猜拳小游戏,供大家参考,具体内容如下 全部代码 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<Windows.h> int pcinput; //电脑输入 int userinput; //用户输入 #define echo ">_ " //俺觉得好看 char case_win(int left, int right);//判断哪边

  • C语言实现猜拳游戏

    一.问题 C语言实现猜拳游戏,用户自己选择对手,可以创建玩家角色.可以记录当前对战情况(对战局数,得分情况) 二.解决思路 猜拳游戏大家都不陌生,从小玩到大,遇到棘手的选择,猜拳往往是最能服众的处理办法.那么今天我们就用C语言来实现这个小游戏.这题比较简单,创建两个字符数组,对应对手和玩家.接着用户选择要出的(石头,剪刀,布),然后是电脑选择,最后把两个选择进行对比,判断输赢. 三.代码实现 第一步,编写game.h头文件,把需要用到的函数声明及一些宏定义写在里面 #ifndef __GAME_

  • C语言数组实现打砖块游戏

    本文实例为大家分享了C语言数组实现打砖块游戏的具体代码,供大家参考,具体内容如下 这次我们使用数组来改进打砖块游戏. 反弹的球 首先我们实现一个可以在荧幕上反弹的小球.使用二维数组 int canvas[High][Width] ( 和js的canvas没有一毛钱关系)来储存画布上的所有元素,值为0时输出空格,值为1时输出小球. 设小球坐标为(ball_x, ball_y),则有canvas[ball_x][ball_y] = 1 ,且暂时将其他元素的值设为0. 每次更新小球位置时将原位置元素设

  • C语言详细实现猜拳游戏流程

    目录 一.游戏逻辑 二.思维导图 三.游戏过程 四.代码分析 1.设置随机数的方法 2.设置计算机出拳的方法 3.判断输赢的方法 4.玩家猜拳 五.完整代码 一.游戏逻辑 1.打印选择菜单(1.play,0.exit) 2.提示玩家0.1.2 分别代表石头.剪刀.布 3.设置与计算机博弈次数 4.为计算机设置出拳(调用rand()函数生成0.1.2其中一个随机数) 5.玩家出拳 6.判断输赢 7.展示玩家和计算机出的拳 8.若退出游戏展示玩家胜负与平局信息 二.思维导图 三.游戏过程 四.代码分

  • 利用C语言实现n字棋游戏

    目录 前言 思路 效果图 开始的界面 棋盘的样子 随机打的坐标 获得胜利 结束程序 代码 test.c game.c game.h 前言 这里就简单发一个n字棋游戏,和井字棋一样,不过这个游戏你可以自定义棋盘的大小. 井字棋是3×3大小,满足三个平齐就获得胜利. 小奔写的这个游戏,你可以自定义为10×10大小,满足6个平齐就获得胜利,都是可以随便定义的. 如果感兴趣的话就可以来尝试一下,或许你可以找到一些bug (至于为什么说它是“人工智障”呢?因为它是随机下的,并不会去针对你,它很有自己的想法

  • C语言实现像素鸟游戏

    本文实例为大家分享了C语言实现像素鸟游戏的具体代码,供大家参考,具体内容如下 在进入更复杂的学习之前,我们最后实现一个小游戏——像素鸟. 下落的小鸟 首先我们写好游戏代码框架并实现小鸟下落和上升(按空格)的功能: #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <cwindow.h> //全局变量 int high,width;    //画面尺寸 int bird_x,b

  • JavaScript实现像素鸟小游戏的详细流程

    目录 <像素鸟>游戏简单介绍 1.功能结构及流程 2.游戏实现效果展示 3.实现思路 代码展示介绍 css样式 js代码 随机背景移动 玩家控制像素鸟 生成随机柱子 积分增加 总结 <像素鸟>游戏简单介绍 游戏中玩家必须控制一只小鸟,跨越由各种不同长度水管所组成的障碍,而这只鸟其实是根本不会飞的……所以玩家每点击一下小鸟就会飞高一点,不点击就会下降,玩家必须控制节奏,拿捏点击屏幕的时间点,让小鸟能在落下的瞬间跳起来,恰好能够通过狭窄的水管缝隙,只要稍一分神,马上就会失败阵亡. 1.

  • Java语言实现的扫雷游戏(1)

    Java类库中提供了用于GUI的swing开发工具包,我们可以利用swing设计出一些简单的经典小游戏,如扫雷,推箱子,俄罗斯方块等.接下来我就简单分享一下用Java设计扫雷游戏的思路与过程. 首先,我们要设计出扫雷的窗口界面,说白了,也就是在窗口上绘制出指定行数和列数的小方格.要在窗体上绘制方格,我们需要一个JPanel面板,所以我们定义类GamePanel让它继承自JPanel,然后我们在就可以这个类上绘制我们所要的信息了.然后,在类中,我们定义一些基本的变量,如行数,列数,雷的数量等等,方

  • C语言实现五子棋小游戏

    首先我们先来看一个稍微简单些的实现方式: #include <stdio.h> #include <stdlib.h> #define N 15 int chessboard[N + 1][N + 1] = { 0 }; int whoseTurn = 0; void initGame(void); void printChessboard(void); void playChess(void); int judge(int, int); int main(void) { init

  • 基于C语言实现的扫雷游戏代码

    本文详细讲述了基于C语言实现的扫雷游戏代码,代码中备有比较详细的注释,便于读者阅读和理解.希望对学习游戏开发的朋友能有一点借鉴价值. 完整的实例代码如下: /* 模拟扫雷游戏 */ #include <graphics.h> #include <math.h> #include <stdio.h> #include <dos.h> #include <stdlib.h> #include <conio.h> #include <

  • C语言实现2048小游戏

    本文实例为大家分享了C语言实现2048小游戏的具体代码,供大家参考,具体内容如下 具有以下特点: 1.linux下完成 2.非堵塞键盘读取 3.随机生成2和4 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #define TTY_PATH "/dev/tty" #define STTY_ON "stty raw -echo -F" #define STTY_O

  • C语言实现俄罗斯方块小游戏

    C语言实现俄罗斯方块小游戏的制作代码,具体内容如下 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #define TTY_PATH "/dev/tty" #define STTY_ON "stty raw -echo -F" #define STTY_OFF "stty -raw echo -F" int map[21][14]; char

  • C语言实现三子棋游戏

    本文实例为大家分享了C语言实现三子棋游戏的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h> #include<time.h> void chess_board(char arr[3][3]) //打印棋盘 { int i = 0; int j = 0; for (i = 0; i < 3; i++) { printf( " %c | %c | %c \n", arr [i][0], a

  • C语言实现24点游戏源代码

    本文实例为大家分享了C语言实现24点游戏的具体代码,供大家参考,具体内容如下 参考文章:C语言实现经典24点算法 将算法实现改成C语言,并可在linux服务器上运行.同时修改为可显示所有结果. 注:如果传参重复,如4,4,7,7这样,会回显重复结果,暂无法清除. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> const double PRECISION

  • C语言实现简单扫雷游戏

    本文实例为大家分享了C语言实现简单扫雷游戏的具体代码,供大家参考,具体内容如下 步骤 1.首先打印游戏选择菜单 2.地图及初始化 1).展示给玩家的地图(show_map) 2).地雷的图(mine_map可知地雷的位置) 3.打印地图 4.用户输入坐标,并检查坐标的合理性 5.判断当前位置是否有地雷,没有则出现数字(表示周围格子中有几个地雷) 6.打印新的地图 7.重复3~6步骤,直到踩雷游戏结束,或胜利. 8重新继续游戏或退出! 代码 主函数及游戏选择菜单 #include<stdio.h>

随机推荐