实践教程--弹球游戏

本文介绍了一个基于C++的弹球游戏实现,通过计时器和信号处理实现球的移动,用户输入控制球的速度和方向。游戏包括计时器驱动、键盘输入等待和状态变量管理等功能,支持二维动画。代码中包含了游戏结构、定时器设置和碰撞检测等关键部分。
摘要由CSDN通过智能技术生成

弹球游戏有三个主要因素:球,墙,用户输入。

(1)球以一定的速度运行;

(2)球碰到墙或挡板会逆行;

(3)用户输入会改变球的运行状态:加速、减速或退出;向上、向下或斜行(二维)。

程序主要功能设计:

(1)计时器驱动

间隔计时器被设置为产生固定的SIGALRMS信号流。响应一个信号,球向前移动一步。

(2)等待键盘输入

程序阻塞等待键盘输入。根据用户按下的键,采取不同的动作。

(3)状态变量

变量记录了球的速度和方向。用户输入修改的变量值决定了小球的速度。计时器处理函数根据速度和位置变量来决定在何时何处画小球。

 

一维动画:一个信号,移动一个单位。

二维动画:两个计时器,斜着移动。如当直角边的比值为1/3时,构造两个自己的计时器:一个记录平行移动的计时器信号数,一个记录垂直移动的计时器信号数。每两个计时器信号向右移动一个单位,每六个计时器信号向上移动一个单位。如果时钟间隔单位分别是10和30的话,球移动的路径相同,就是慢些。

实现:为实现二维动画,同时在两个方向移动,用两个计数器充当计时器。每个计数器有两个属性:当前值和间隔。当前值表示在下次重画之前还要等待多少个计时信号。间隔指明两次移动之间所要等待的计时信号个数。分别命名为ttg和ttm。

 

代码:

/* bounce.h            */

#ifndef BOUNCH_H
#define BOUNCH_H

/* some settings for the game    */

#define    BLANK        ' '
#define    WALL        '.'
#define    USER_WALL    '='
#define    DFL_SYMBOL    'o'
#define    TOP_ROW        6
#define    BOT_ROW     19
#define    LEFT_EDGE    6
#define    RIGHT_EDGE    44
#define    X_INIT        10        /* starting col        */
#define    Y_INIT        10        /* starting row        */
#define    TICKS_PER_SEC    25        /* affects speed    */

#define    X_TTM        5
#define    Y_TTM        8

int score = 0;
int user_wall_pos = 5;
int user_wall_len = 9;

/** the ping pong ball **/

struct ppball {
        int    y_pos, x_pos,
                y_ttm, x_ttm,
                y_ttg, x_ttg,
                y_dir, x_dir;
        char    symbol ;

    } ;

#endif

#include    <stdio.h>
#include        <sys/time.h>
#include        <signal.h>

/*
 *      set_ticker.c
 *      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值