C语言实现反弹球消砖块游戏

本文实例为大家分享了C语言实现反弹球消砖块游戏的具体代码,供大家参考,具体内容如下

1.目标要求:

1.击中上方方块’H’,分数加1
2.下方控制线没有接到小球时,游戏结束

2.C语言代码:

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

/*
        《反弹球消砖块》    by:你最珍贵
        
             ———————————
            |控制信号: | 左 | 右 |
             ——————————— 
            |    键盘: |  j |  l | 
             ———————————
     
     1.击中上方方块'H',分数加1  
     2.下方控制线没有接到小球时,游戏结束 

*/

void HideCursor(){    //隐藏光标位置 ,这个函数复制代码就行 
    CONSOLE_CURSOR_INFO cursor_info={1,0}; 
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
}
void gotoxy(int x,int y){    //把光标放在(0,0)位置 ,这个函数复制代码就行
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD pos;
    pos.X = x;
    pos.Y = y;
    SetConsoleCursorPosition(handle,pos);
} 

int IsEnd;//是否结束 
int interface_x,interface_y;//界面行数、列数 
int block_y;//砖块列位置 
int ctrlline_width,ctrlline_left,ctrlline_right;//控制线的左列数,宽度,右列数 
int ball_x,ball_y;//小球位置 
int ballv_x,ballv_y; //小球行列速度(1为正方向-1为反方向)
int scores;//分数 
int ballv_num;//小球速度的慢速变量,数值越大越慢 
int ballv_num_i;//小球慢速变量值的循环变量 

void startup(){    //【数据初始化】 
    HideCursor();//不显示光标 
    IsEnd = 0;
    interface_x = 22;
    interface_y = 30;
    block_y = rand()%(interface_y-6)+2; 
    ctrlline_width=8;
    ctrlline_left=(interface_y-ctrlline_width-2)/2+1+1;//控制线最左列位置 
    ctrlline_right=ctrlline_left+ctrlline_width-1; 
    ball_x=interface_x-1;
    ball_y=ctrlline_left+ctrlline_width/2; 
    ballv_x=1;
    ballv_y=1;
    scores=0;
    ballv_num=3; 
    ballv_num_i=1; 
}
void show_begin(){//【初始页面展示】 
    int i,j;
    int start=0;
    char input;
     while(!start){
         gotoxy(0,0);//每次输出页面把鼠标放回(0,0) 
         for(i=1;i<=interface_x/2-4;i++) printf("\n"); 
        for(i=1;i<interface_y/2-8;i++) printf(" ");
        printf("《反弹球消砖块》\n\n");
        for(i=1;i<interface_y/2-9;i++) printf(" ");
        printf("请按任意键开始游戏\n\n");
        for(i=1;i<=interface_x/2-6;i++) printf("\n");
        if(kbhit()){
            input = getch();
            if(input) start=1;
        }
    }
} 
void show(){    //【显示画面】 
    gotoxy(0,0);//每次输出页面把鼠标放回(0,0) 
    int i,j;
    for(i=1;i<=interface_y/2-8;i++) printf(" ");
    printf("《反弹球消砖块》") ;
    for(i=1;i<=interface_y/2-8-8;i++) printf(" ");
    printf("分数:%3d\n",scores);
    for(i=1;i<=interface_x;i++){
        printf(" ");//使屏幕对称加的空格 
        for(j=1;j<=interface_y;j++){            
            if(j==1||j==interface_y){    //边框 
                printf("|");
            }else if(i==interface_x){    //边框 
                printf("_");
            }else if(i==1){        //上边界 
                printf("V");
            }else if(i==interface_x-1&&(j>=ctrlline_left&&j<=ctrlline_right)){    //控制线 
                printf("*");
            }else if(i==2&&(j>=block_y&&j<=block_y+4)){        //砖块 
                printf("H");
            }else if(i==ball_x&&j==ball_y){        //反弹球 
                printf("O");
            }else printf(" ");    //什么也不是的位置输出空格 
        }
        printf("\n");
    }
    
}
void update_outinput(){    //【与输入无关的更新】 
    ballv_num_i= (ballv_num_i==ballv_num)?1:ballv_num_i+1;//ballv_num_i一次从{1到ballv_num}循环,当ballv_num_i为最大时才更新球的位置,此目的是减速 
    if(ballv_num_i==ballv_num){
        if(ball_y==2||ball_y==interface_y-1){//判断是否到左右边界 
            ballv_y *= -1;
        }
        if(ball_x==2){//判断是否到上边界
            if(ball_y>=block_y&&ball_y<=block_y+4){//判断在上边界有无消去砖块 
                block_y = rand()%(interface_y-6)+2;//消去则砖块位置重置 
                scores++;//分数加1
                printf("\a");//提示音 
            }
            ballv_x *= -1;//不论是否碰砖块,都要反弹 
        }
        if(ball_x==interface_x-1){//判断是否下边界接住小球了,若接住反弹,否则结束游戏 
            if(ball_y>=ctrlline_left && ball_y<=ctrlline_right){
                ballv_x *= -1;
            }else{
                IsEnd = 1;
            }
        }
        ball_x += ballv_x;
        ball_y += ballv_y;
    }    
}
void update_input(){//【与输入有关的更新】 
    char input;
    if(kbhit()){
        input = getch();
        if( input == 'j'){//输入“j”下方控制线左移 
            ctrlline_left= (ctrlline_left==2)?2:ctrlline_left-1;
            ctrlline_right= ctrlline_left+ctrlline_width-1;
        }else if( input == 'l'){//输入“l”下方控制线右移 
            ctrlline_left= (ctrlline_left==interface_y-ctrlline_width)?\
interface_y-ctrlline_width:ctrlline_left+1;
            ctrlline_right= ctrlline_left+ctrlline_width-1;
        }
    }
}
void show_end(){//【显示失败界面】 
    system("cls"); 
    printf("\n\n\n\n\n\ngame over!\n\n\n\n\n\n\n\n\n\n\n\n\n");    
    system("pause");//暂停 
    system("pause");//暂停
}

int main(){
    startup();    //数据初始化
    show_begin();//初始页面 
    while(!IsEnd){    //游戏循环执行 
        show();    // 显示画面 
        update_outinput();    //与输入无关的更新 
        update_input();    //与输入有关的更新 
    }
    show_end(); //显示失败界面 
    return 0;
}

3.运行结果:

小游戏玩法:

《反弹球消砖块》by:你最珍贵

————————————————————
    |控制信号: | 左 | 右 |
     ———————————————————— 
    |   键盘:  |  j |  l | 
     ————————————————————

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

(0)

相关推荐

  • C语言实现简单弹球游戏

    电视机待机的屏幕上的弹球,怎么实现? 今天文章就跟大家分享下C语言实现简单弹球游戏的具体代码,供大家参考,具体内容如下 #include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <math.h> #include <windows.h> //#include <sy

  • C语言实现反弹球小游戏

    本文为大家分享了C语言反弹球游戏的具体代码,供大家参考,具体内容如下 这是利用函数写的C语言小游戏,用来检验自己的学习成果 反弹球的实现主要有几个子函数组成 问题也在于如何实现小球的下落,以及碰撞得分等情况 #include<stdio.h> #include<windows.h> #include<conio.h> //定义全局变量 int high,width; //游戏边界 int ball_x,ball_y; //小球位置 int ball_vx,ball_vy

  • C语言实现反弹球游戏

    C语言小游戏--反弹球(简单的图形化界面),供大家参考,具体内容如下 1.环境准备和安装 安装Visual C++ 6.0. 去Easy X官网下载Easy X安装包. 2.Eaxy X功能的简单介绍 Easy X类似于一个库函数,其中带有许多很有用的函数. Easy x首先创建一个新的窗口进行绘图. 可以画常见点 线 多边形 可以调节颜色. 可以插入图片,音乐. 可以获取鼠标信息. 其中函数的具体使用可以看安装包中带有的帮助文件 3.反弹球游戏主函数框架 int main (void) { s

  • C语言 小游戏打砖块实现流程详解

    始祖是美国英宝格公司(en:Atari Games,ja:アタリ (ゲーム))于1976年推出的街机游戏"Breakout"(en:Breakout),由该公司在1972年发行的"PONG"(en:PONG,ja:ポン (ゲーム),世界上第一款电子游戏,类似台球)改良而来.相较于其前作,一个人就可以玩与变化丰富这两项特点让Breakout相当卖座,使各家公司竞相模仿. 因为规则简单与游戏性,现在许多移动电话都有内建打砖块游戏,也有许多因特网小游戏版本,目前在网上可以

  • C语言实现反弹球消砖块游戏

    本文实例为大家分享了C语言实现反弹球消砖块游戏的具体代码,供大家参考,具体内容如下 1.目标要求: 1.击中上方方块’H’,分数加12.下方控制线没有接到小球时,游戏结束 2.C语言代码: #include<stdio.h> #include<stdlib.h> #include<windows.h> #include<conio.h> /*         <反弹球消砖块>    by:你最珍贵                       --

  • C语言实现简单反弹球消砖块游戏

    反弹球消砖块,是一款很简单的打砖块游戏,控制你的挡板挡住弹球,打掉上面的砖块,本篇博客中,主要使用printf与scanf函数实现消砖块游戏 整体思路 主函数 int main() {     startup();//初始化     while (1)     {         show();//显示画面           updateWitoutIput();//与用户输入无关的更新  //更新数据         updateWithInput(); //与用户输入有关的更新  //输入

  • C语言用函数实现反弹球消砖块

    本文实例为大家分享了C语言用函数实现反弹球消砖块的具体代码,供大家参考,具体内容如下 一.项目描述和最终的成果展示 这是在上一次弹跳小项目上进行了一系列的优化和封装.项目: 弹跳的小球上次没有用函数进行的封装.这次在上次的基础上进行封装和一些功能的优化. 最终效果图如下: 二.封装后的弹跳小球 代码如下: #include<stdio.h> #include<string.h> #include<conio.h> #include<windows.h> //

  • C语言用数组实现反弹球消砖块

    本文项目为大家分享了C语言用数组实现反弹球消砖块的具体代码,供大家参考,具体内容如下 一.效果展示: 二.代码如下: #include<stdio.h> #include<string.h> #include<conio.h> #include<Windows.h> #include<time.h> #define High 24   //游戏画面尺寸 #define Width 36 //全局变量 int ball_x,ball_y;//小球的

  • C语言用easyx实现消砖块游戏

    本文项目为大家分享了C语言用easyx实现消砖块游戏的具体代码,供大家参考,具体内容如下 一.最终效果展示 效果图如下: 这个项目还是有很多的细节漏洞的.例如: 边界控制这里还是有点问题的. 二.绘制静态的挡板 代码如下: #include<conio.h> #include<graphics.h> #define High 480 //游戏画面尺寸 #define Width 640 //全局变量 int ball_x,ball_y;//小球的坐标 int ball_vx,bal

  • VUE+Canvas 实现桌面弹球消砖块小游戏的示例代码

    大家都玩过弹球消砖块游戏,左右键控制最底端的一个小木板平移,接住掉落的小球,将球弹起后消除画面上方的一堆砖块. 那么用VUE+Canvas如何来实现呢?实现思路很简单,首先来拆分一下要画在画布上的内容: (1)用键盘左右按键控制平移的木板: (2)在画布内四处弹跳的小球: (3)固定在画面上方,并且被球碰撞后就消失的一堆砖块. 将上述三种对象,用requestAnimationFrame()函数平移运动起来,再结合各种碰撞检查,就可以得到最终的结果. 先看看最终的效果: 一.左右平移的木板 最底

  • C语言实现消消乐游戏

    本文实例为大家分享了C语言实现消消乐游戏的具体代码,供大家参考,具体内容如下 问题描述 给定一个矩阵, 判断移动哪一个格子,可以实现消除.(定义连续三个即可消除) 据说是华为的笔试题. 分析 先写一个函数,判断包含(i, j)的格子是否可能实现消除. 然后就是向右向下交换,然后调用上面写好的函数判断 被交换的两个格子是否实现消除. 重点是: 1.只需要向右向下交换,因为遍历的时候,后面的交换会重复.前一个判断了向右交换是否消除,后一个遍历就不需要再判断向左交换是否重复了. 2.一定要对被交换的两

  • go语言实现猜数字小游戏的方法

    本文实例讲述了go语言实现猜数字小游戏的方法.分享给大家供大家参考.具体分析如下: 随机生成一个数字,输入一个数字看是否匹对,匹配则结速,反之提示是大了还是小了 复制代码 代码如下: package main import (     "bufio"     "fmt"     "math/rand"     "os"     "strconv"     "time" ) var (  

  • 基于C语言实现的贪吃蛇游戏完整实例代码

    本文以实例的形式讲述了基于C语言实现的贪吃蛇游戏代码,这是一个比较常见的游戏,代码备有比较详细的注释,对于读者理解有一定的帮助. 贪吃蛇完整实现代码如下: #include <graphics.h> #include <conio.h> #include <stdlib.h> #include <dos.h> #define NULL 0 #define UP 18432 #define DOWN 20480 #define LEFT 19200 #defi

  • C语言贪吃蛇经典小游戏

    一.贪吃蛇小游戏简介: 用上下左右控制蛇的方向,寻找吃的东西,每吃一口就能得到一定的积分,而且蛇的身子会越吃越长,身子越长玩的难度就越大,不能碰墙,也不能咬到自己的身体,等到了一定的分数,就能过关. 二.函数框架 三.数据结构 typedef struct Snake { size_t x; //行 size_t y; //列 struct Snake* next; }Snake, *pSnake; 定义蛇的结构体,利用单链表来表示蛇,每个结点为蛇身体的一部分. 四.代码实现(vs2010  c

随机推荐