项目: 双人反弹球游戏
目录
- 一、最终项目描述和效果
- 二、基本框架实现
- 三、异步操作的实现
- 四、双人反弹球
一、最终项目描述和效果
项目描述: 实现双人玩的弹跳球游戏
最终效果图如下:
二、基本框架实现
代码如下:
#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;
}
效果图如下:
项目: 双人反弹球游戏相关推荐
- 期末安卓项目课程设计,Android+spring boot + mybatis-plus的坦克大战双人手机游戏
一款双人手机游戏<坦克大战>的android项目,可做课程设计作业 简介 这是一个安卓的游戏项目,坦克大战,它是一个双人对战pk的坦克游戏,可以坦克移动,发射子弹,然后有击杀和死亡统计并且 ...
- 【OpenCV C++ 案例实战一】实现双人篮球游戏
[OpenCV C++ 案例实战一]实现双人篮球游戏 概述 一. 预处理 1.1定义结构体 1.2背景处理 1.3篮球处理 二.项目实现 2.1篮球放置(角色放置同理) 2.2篮球移动(角色移动同理, ...
- 百行 HTML5 代码实现四种双人对弈游戏
简介: 本文是一个非常具有挑战性的编程,因为 100 行代码,约莫 10000 个字符左右,将实现围棋.五子棋.四子棋和翻转棋四种双人对弈游戏.请注意,这四个对弈游戏不是初级编程者的习作,而是有着棋盘 ...
- c++游戏代码坦克大作战_一红一蓝多种模式的双人小游戏:红蓝大作战
作者有话说:上次推荐的森林冰火人很多小伙伴后台找我要链接,或者搜索不到:首先声明下森林冰火人.同桌大作战都不是辣椒人游戏工作室研发的,小编也是微信小游戏双人栏目下搜索到的,如果想要玩双人小游戏的可以打 ...
- C语言简单的双人小游戏
#include<stdio.h>//双人小游戏 #include<windows.h> int main() { printf("规则:输1聚气(用于买招式 ...
- java课设小迷宫含代码_Java小项目之迷宫游戏的实现方法
项目要求: 一个网格迷宫由n行n列的单元格组成,每个大院个要么是空地(用0表示),要么是障碍物(用1表示),你的任务是找一条从起点到终点的移动序列,其中只能上下左右移动到相邻单元格.任何时候都不能在有 ...
- Python制作的足球双人小游戏,你确定你不过来看看?
相关文件 关注小编,私信小编领取哟! 当然别忘了一件三连哟~~ 对了大家可以关注小编的公众号哟~~ Python日志 开发环境 Python版本:3.6.4 相关模块: pygame模块: 以及一些P ...
- java课程设计纸牌游戏_java练习项目之纸牌游戏实例源码
java应用练习项目之纸牌游戏实例源码.java纸牌项目练习题目要求: 定义纸牌的花色 定义纸牌的大小2A 花色与数字组成一张牌 组成一整副纸牌 构造玩家 发牌 题目 : 创建一副扑克牌,这副牌是标准 ...
- java双人游戏_Java 简易双人坦克游戏实现
[实例简介] 通过Java制作简易双人坦克游戏,游戏界面简单,没有美化,不过实现双人游戏,能超级炮弹,血条,复活等功能,基本BUG已经修复,需要的可以下载学习. [实例截图] [核心代码] 简易双人坦 ...
最新文章
- pythonweb静态服务器_Python面向对象之Web静态服务器
- 新造车公司背后的「资本大佬」
- 上周热点回顾(12.8-12.14)
- SAP外向交货单中的批次拆分应用于免费货物的小问题
- php判断参数_php检查函数必传参数是否存在的实例详解
- 7-121 深入虎穴 (25 分)(dfs,bfs)
- Java 输入一个整数,计算它各位上数字的和。(注意:是任意位的整数)
- 打乱一个排好序的 list 对象 alist?
- 强化学习各概念整理(value/policy-based、on/off-policy、model-based/free、offline)
- SAI钢笔工具如何使用,入门篇
- 数据价值挖掘利器!阿里云实时数仓AnalyticDB PG
- recon-ng模块安装与基本使用(国内环境)
- 【博客126】( 二 ) 使用libgc库来帮你管理内存
- 一知半解对 fcitx5 + openbox + SLiM 的暂时解法
- 2013年07月15日
- ROS中7自由度机械臂自定义发布订阅节点
- 【dubbo源码解析】 --- dubbo spi 机制(@SPI、@Adaptive)详解
- python常用库文件一键安装
- 航空发动机数据-C-MAPSS数据集的个人理解
- sql sever 索引和视图