目录

  • 一、最终项目描述和效果
  • 二、基本框架实现
  • 三、异步操作的实现
  • 四、双人反弹球

一、最终项目描述和效果

项目描述:   实现双人玩的弹跳球游戏

最终效果图如下:

二、基本框架实现

代码如下:

#include<conio.h>
#include<graphics.h>
#define High 480//游戏画面尺寸
#define Width 640//全局变量
int ball1_x,ball1_y;//小球1的坐标
int ball2_x,ball2_y;//小球2的坐标
int radius;void startup()//数据的初始化
{ball1_x=Width/3;ball1_y=High/3;ball2_x=Width*2/3;ball2_y=High*2/3;radius=20;initgraph(Width,High);BeginBatchDraw();
}void clean()//消除画面
{setcolor(BLACK);setfillcolor(BLACK);fillcircle(ball1_x,ball1_y,radius);fillcircle(ball2_x,ball2_y,radius);
}void show()//显示画面
{setcolor(GREEN);setfillcolor(GREEN);fillcircle(ball1_x,ball1_y,radius);//绘制绿圆setcolor(RED);setfillcolor(RED);fillcircle(ball2_x,ball2_y,radius);//绘制红圆FlushBatchDraw();Sleep(3);
}void updateWithoutInput()//与用户输入无关的更新
{}void updateWithInput()//与用户输入有关的更新
{char input;if(kbhit())//判断是否有输入{input=getch();int step=10;if(input=='a')ball1_x-=step;if(input=='d')ball1_x+=step;if(input=='w')ball1_y-=step;if(input=='s')ball1_y+=step;if(input=='4')ball2_x-=step;if(input=='6')ball2_x+=step;if(input=='8')ball2_y-=step;if(input=='5')ball2_y+=step;}
}void gameover()
{EndBatchDraw();closegraph();
}int main(void)
{startup();//数据的初始化while(1){clean();//把之前绘制的内容取消updateWithoutInput();//与用户输入无关的更新updateWithInput();//与用户输入有关的更新show();//显示新画面}gameover();//游戏结束,进行后续处理return 0;
}
你会发现这有一个弊端:  双方同一时刻只能有一个运行,不能同时运行。

三、异步操作的实现


代码如下:

#include<conio.h>
#include<graphics.h>
#define High 480//游戏画面尺寸
#define Width 640//全局变量
int ball1_x,ball1_y;//小球1的坐标
int ball2_x,ball2_y;//小球2的坐标
int radius;void startup()//数据的初始化
{ball1_x=Width/3;ball1_y=High/3;ball2_x=Width*2/3;ball2_y=High*2/3;radius=20;initgraph(Width,High);BeginBatchDraw();
}void clean()//消除画面
{setcolor(BLACK);setfillcolor(BLACK);fillcircle(ball1_x,ball1_y,radius);fillcircle(ball2_x,ball2_y,radius);
}void show()//显示画面
{setcolor(GREEN);setfillcolor(GREEN);fillcircle(ball1_x,ball1_y,radius);//绘制绿圆setcolor(RED);setfillcolor(RED);fillcircle(ball2_x,ball2_y,radius);//绘制红圆FlushBatchDraw();Sleep(3);
}void updateWithoutInput()//与用户输入无关的更新
{}void updateWithInput()//与用户输入有关的更新
{int step=1;if((GetAsyncKeyState(0x41)&0x8000))//aball1_x-=step;if((GetAsyncKeyState(0x44)&0x8000))//dball1_x+=step;if((GetAsyncKeyState(0x57)&0x8000))//wball1_y-=step;if((GetAsyncKeyState(0x53)&0x8000))//sball1_y+=step;if((GetAsyncKeyState(VK_LEFT)&0x8000))//左方向键ball2_x-=step;if((GetAsyncKeyState(VK_RIGHT)&0x8000))//右方向键ball2_x+=step;if((GetAsyncKeyState(VK_UP)&0x8000))//上方向键ball2_y-=step;if((GetAsyncKeyState(VK_DOWN)&0x8000))//下方向键ball2_y+=step;
}void gameover()
{EndBatchDraw();closegraph();
}int main(void)
{startup();//数据的初始化while(1){clean();//把之前绘制的内容取消updateWithoutInput();//与用户输入无关的更新updateWithInput();//与用户输入有关的更新show();//显示新画面}gameover();//游戏结束,进行后续处理return 0;
}

效果图如下:

四、双人反弹球

代码如下:

#include<conio.h>
#include<graphics.h>
#include<Windows.h>
#define High 480//游戏画面尺寸
#define Width 640//全局变量
int ball_x,ball_y;//小球的坐标
int ball_vx,ball_vy;//小球2的速度
int bar1_left,bar1_right,bar1_top,bar1_bottom;//挡板1的上下左右位置坐标
int bar2_left,bar2_right,bar2_top,bar2_bottom;//挡板2的上下左右位置坐标
int bar_height,bar_width;//挡板的高度和宽度
int radius;void startup()//数据的初始化
{ball_x=Width/2;ball_y=High/2;ball_vx=1;ball_vy=1;radius=20;bar_width=Width/30;bar_height=High/4;bar1_left=Width*1/20;//挡板1的数据初始化bar1_top=High/4;bar1_right=bar1_left+bar_width;bar1_bottom=bar1_top+bar_height;bar2_left=Width*18.5/20;//挡板2的数据初始化bar2_top=High/4;bar2_right=bar2_left+bar_width;bar2_bottom=bar2_top+bar_height;initgraph(Width,High);BeginBatchDraw();
}void clean()//消除画面
{setcolor(BLACK);setfillcolor(BLACK);fillcircle(ball_x,ball_y,radius);fillcircle(ball_x,ball_y,radius);bar(bar1_left,bar1_top,bar1_right,bar1_bottom);//绘制挡板bar(bar2_left,bar2_top,bar2_right,bar2_bottom);
}void show()//显示画面
{setcolor(GREEN);setfillcolor(GREEN);fillcircle(ball_x,ball_y,radius);//绘制绿圆setcolor(RED);setfillcolor(RED);bar(bar1_left,bar1_top,bar1_right,bar1_bottom);bar(bar2_left,bar2_top,bar2_right,bar2_bottom);FlushBatchDraw();Sleep(3);
}void updateWithoutInput()//与用户输入无关的更新
{//挡板和小球碰撞,小球反弹if(ball_x+radius>=bar2_left&&ball_y+radius>=bar2_top&&ball_y+radius<bar2_bottom)ball_vx=-ball_vx;else if(ball_x-radius<=bar1_right&&ball_y+radius>=bar1_top&&ball_y+radius<bar1_bottom)ball_vx=-ball_vx;//更新小球的坐标ball_x=ball_x+ball_vx;ball_y=ball_y+ball_vy;if((ball_x<=radius)||(ball_x>+Width-radius))ball_vx=-ball_vx;if((ball_y<=radius)||(ball_y>+High-radius))ball_vy=-ball_vy;}void updateWithInput()//与用户输入有关的更新
{int step=1;if((GetAsyncKeyState(0x57)&0x8000))//wbar1_top-=step;if((GetAsyncKeyState(0x53)&0x8000))//sbar1_top+=step;if((GetAsyncKeyState(VK_UP)&0x8000))//上方向键bar2_top-=step;if((GetAsyncKeyState(VK_DOWN)&0x8000))//下方向键bar2_top+=step;if(bar1_top<0)//判断挡板是否超过屏幕bar1_top+=step;if(bar2_top<0)bar2_top+=step;if(bar1_top+bar_height>High)bar1_top-=step;if(bar2_top+bar_height>High)bar2_top-=step;bar1_bottom=bar1_top+bar_height;bar2_bottom=bar2_top+bar_height;
}void gameover()
{EndBatchDraw();closegraph();
}int main(void)
{startup();//数据的初始化while(1){clean();//把之前绘制的内容取消updateWithoutInput();//与用户输入无关的更新updateWithInput();//与用户输入有关的更新show();//显示新画面}gameover();//游戏结束,进行后续处理return 0;
}

效果图如下:

项目: 双人反弹球游戏相关推荐

  1. 期末安卓项目课程设计,Android+spring boot + mybatis-plus的坦克大战双人手机游戏

    一款双人手机游戏<坦克大战>的android项目,可做课程设计作业 简介 这是一个安卓的游戏项目,坦克大战,它是一个双人对战pk的坦克游戏,可以坦克移动,发射子弹,然后有击杀和死亡统计并且 ...

  2. 【OpenCV C++ 案例实战一】实现双人篮球游戏

    [OpenCV C++ 案例实战一]实现双人篮球游戏 概述 一. 预处理 1.1定义结构体 1.2背景处理 1.3篮球处理 二.项目实现 2.1篮球放置(角色放置同理) 2.2篮球移动(角色移动同理, ...

  3. 百行 HTML5 代码实现四种双人对弈游戏

    简介: 本文是一个非常具有挑战性的编程,因为 100 行代码,约莫 10000 个字符左右,将实现围棋.五子棋.四子棋和翻转棋四种双人对弈游戏.请注意,这四个对弈游戏不是初级编程者的习作,而是有着棋盘 ...

  4. c++游戏代码坦克大作战_一红一蓝多种模式的双人小游戏:红蓝大作战

    作者有话说:上次推荐的森林冰火人很多小伙伴后台找我要链接,或者搜索不到:首先声明下森林冰火人.同桌大作战都不是辣椒人游戏工作室研发的,小编也是微信小游戏双人栏目下搜索到的,如果想要玩双人小游戏的可以打 ...

  5. C语言简单的双人小游戏

    #include<stdio.h>//双人小游戏 #include<windows.h> int main() {     printf("规则:输1聚气(用于买招式 ...

  6. java课设小迷宫含代码_Java小项目之迷宫游戏的实现方法

    项目要求: 一个网格迷宫由n行n列的单元格组成,每个大院个要么是空地(用0表示),要么是障碍物(用1表示),你的任务是找一条从起点到终点的移动序列,其中只能上下左右移动到相邻单元格.任何时候都不能在有 ...

  7. Python制作的足球双人小游戏,你确定你不过来看看?

    相关文件 关注小编,私信小编领取哟! 当然别忘了一件三连哟~~ 对了大家可以关注小编的公众号哟~~ Python日志 开发环境 Python版本:3.6.4 相关模块: pygame模块: 以及一些P ...

  8. java课程设计纸牌游戏_java练习项目之纸牌游戏实例源码

    java应用练习项目之纸牌游戏实例源码.java纸牌项目练习题目要求: 定义纸牌的花色 定义纸牌的大小2A 花色与数字组成一张牌 组成一整副纸牌 构造玩家 发牌 题目 : 创建一副扑克牌,这副牌是标准 ...

  9. java双人游戏_Java 简易双人坦克游戏实现

    [实例简介] 通过Java制作简易双人坦克游戏,游戏界面简单,没有美化,不过实现双人游戏,能超级炮弹,血条,复活等功能,基本BUG已经修复,需要的可以下载学习. [实例截图] [核心代码] 简易双人坦 ...

最新文章

  1. pythonweb静态服务器_Python面向对象之Web静态服务器
  2. 新造车公司背后的「资本大佬」
  3. 上周热点回顾(12.8-12.14)
  4. SAP外向交货单中的批次拆分应用于免费货物的小问题
  5. php判断参数_php检查函数必传参数是否存在的实例详解
  6. 7-121 深入虎穴 (25 分)(dfs,bfs)
  7. Java 输入一个整数,计算它各位上数字的和。(注意:是任意位的整数)
  8. 打乱一个排好序的 list 对象 alist?
  9. 强化学习各概念整理(value/policy-based、on/off-policy、model-based/free、offline)
  10. SAI钢笔工具如何使用,入门篇
  11. 数据价值挖掘利器!阿里云实时数仓AnalyticDB PG
  12. recon-ng模块安装与基本使用(国内环境)
  13. 【博客126】( 二 ) 使用libgc库来帮你管理内存
  14. 一知半解对 fcitx5 + openbox + SLiM 的暂时解法
  15. 2013年07月15日
  16. ROS中7自由度机械臂自定义发布订阅节点
  17. 【dubbo源码解析】 --- dubbo spi 机制(@SPI、@Adaptive)详解
  18. python常用库文件一键安装
  19. 航空发动机数据-C-MAPSS数据集的个人理解
  20. sql sever 索引和视图

热门文章

  1. 五分钟搞定 Linux 文档全部知识,就看这篇文章
  2. P1586 四方定理
  3. Python第00次作业
  4. 重构手法(一)之重新组织函数
  5. 阅读《Oracle内核技术揭秘》的读书笔记
  6. iphone开发笔记
  7. sqlserver 日常检查脚本
  8. esp32 烧录固件
  9. 进程环境详解(四)---getenv、putenv和setenv函数详解
  10. [BLE--Link Layer]物理信道