frame.c

来自「QT 做的俄罗斯方快 基于LINUX下的」· C语言 代码 · 共 120 行

C
120
字号
#include "stdio.h"#include "block.h"RussiaBlock * russia_block = NULL;static void add_match(RussiaBlock * rb){    RBOPS * rb_ops = rb->rb_ops;    if (rb_ops->add_match)        rb_ops->add_match(rb);}static inline int match_ready(RussiaBlock * rb){    return ((rb->match[0]->status & PLAYER_READY)                && (rb->match[1]->status & PLAYER_READY));}static void init_match_player(RussiaBlock * rb){    int i;    for (i = 0; i < 2; i++)        init_player(rb, rb->match[i]);}static void game_start(RussiaBlock * rb){    switch (rb->type) {    case GAMETYPE_ALONE_MATCH:    {        if (!(rb->match[0] && rb->match[1]))            ;        else if (match_ready(rb))            rb->status |= STATUS_RUN;        else            rb->status &= ~STATUS_RUN;    }    break;    case GAMETYPE_ALONE_SINGLE:        if (rb->match[0] && (rb->match[0]->status & PLAYER_READY))            rb->status |= STATUS_RUN;        else            rb->status &= ~STATUS_RUN;    break;    case GAMETYPE_COMPUTER_MATCH:    break;    case GAMETYPE_ONLINE_SERVER:        if (!(rb->match[0] && rb->match[1]))            add_match(rb);        else if (match_ready(rb)) {            rb->status |= STATUS_RUN;            init_match_player(rb);        }        else            rb->status &= ~STATUS_RUN;    break;    case GAMETYPE_ONLINE_CLIENT:    break;    }}/*接收玩家数据(本地主要是控制事件, 网络包括输入输出等信息)*/static void recv_player_data(RussiaBlock * rb){    RBOPS * rb_ops = rb->rb_ops;    if (rb_ops->recv_player_data)        rb_ops->recv_player_data(rb);}/*发送玩家数据件*/static void send_player_data(RussiaBlock * rb){    RBOPS * rb_ops = rb->rb_ops;    if (rb_ops->send_player_data)        rb_ops->send_player_data(rb);}/*刷新屏幕*/static int refresh_screen(RussiaBlock * rb, Mtime time){    IOOPS * io_ops = rb->io_ops;    if (io_ops->refresh_screen)        io_ops->refresh_screen(time);}static int exec_misc_cmd(RussiaBlock * rb){    if (rb->rb_ops->exec_misc_cmd)        rb->rb_ops->exec_misc_cmd(rb);}void clock_frame(Mtime time){    add_player(russia_block);    recv_player_data(russia_block);    if (!(russia_block->status & STATUS_RUN))        game_start(russia_block);    else        game_frame(russia_block, time);    send_player_data(russia_block);    exec_misc_cmd(russia_block);    refresh_screen(russia_block, time);    return;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?