java实现兵乓球比赛_C语言实现乒乓球比赛
本文实例为大家分享了C语言实现乒乓球比赛的具体代码,供大家参考,具体内容如下
1)、基本要求
用8个LED发光管(红黄绿)的来回滚动显示来模拟打乒乓球时乒乓球在两边球台上的来回运动。比赛双方用按钮/开关(双方各用1个按钮/开关)的方法来模拟发球与接球,即发球方按动其控制的按钮/开关/健,球从发球方一侧向对方运动(LED发光管从发球方到对方逐个点亮,滚动显示),当球运动至接球方时,接球方立即按动其控制的按钮/开关/键,“击球”使球“弹回”发球方一侧,如此周而复始,直至在规定的击球时间内有一方未能完成击球动作,从而对方得一分,然后继续比赛。比赛规则可参照一般的乒乓球比赛规则。
要求:
(1). 球以每0.5秒滚过1个LED的速度移动;
(2). 回球需在球到达后的0.5秒内进行(按下按钮),否则按失球计;
(3). 球未到达提前按下按钮按失球处理,不起回球作用;
(4). 用扩展的4个七段数码(小键盘上)为双方记分(每方2个八段码, ,按10进制计数,初始值00:00,可自行设计显示及规则)
2)、设计提示
球到达接球方后,立即读接球方的按钮状态,若未按则有效(若已按下则按失球计),然后不断读此按钮状态,直到按下代表“击球”动作。(采用中断,可以用同一个按键轮流按动识别)。
3)、进一步设计要求
(1). 在8×8点阵(虚拟大屏)同步显示球移动情况,设计显示输赢球图形状态、效果等;移动、击球等精确(中断)计时;
(2). 通过拨动开关或键盘设定改变球移动速度,即每个LED管点亮时间分别为0.5秒、0.3秒、0.2秒;通过拨动开关或键盘设定改变允许击球时间0.3秒、0.2秒、0.1秒;球移动速度取决于击球时间,即球移动速度(每个LED点亮时间)在0.2~0.5秒内可变,具体取决于球到达接球方后击球所花的时间0~0.5秒如花费的时间短则回球后球移动速度快反之回球后移动
#include "interface.h"
void init8255(void);
const unsigned short Port8255Base=0x288;
const unsigned char ControlWord8255=0x80;
Input/Output.PortA:Output
unsigned char gData=0x80;
int flag=0;
int num=0;
const unsigned char ControlWord8255B = 0x82;
const unsigned char ControlWord8255E = 0x88;
void init8255B(void);
int scoreleft,scoreright;
int speedlamp;
int speed2;
int speed3;
void turnleft()
{
gData=1;
while(1)
{
PortWriteByte(Port8255Base,gData);
if(gData==128)
{
flag=0;
break;
}
gData*=2;
sleep(speedlamp);
}
}
void turnright()
{
gData=128;
while(1)
{
PortWriteByte(Port8255Base,gData);
if(gData==1)
{
flag=1;
break;
}
gData/=2;
sleep(speedlamp);
}
}
unsigned char led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
BYTE pdata;
BYTE reflect;
void main( )
{
init8255B();
//int speedlamp=500;
BYTE controldudu;
PortReadByte(Port8255Base + 2, &controldudu);
printf("%d \n",controldudu);
controldudu/=32;
int k5=controldudu%2;
controldudu/=2;
int k6=controldudu%2;
if(k6==0)
speedlamp=500;
else
speedlamp=50;
if(k5==0)
speed2=500;
else
speed2=1;
printf("%d %d\n",k6,k5);
pdata/=16;
scoreleft=0;
scoreright=0;
BYTE pdata=0;
int k0=0;
int k7=0;
int score0=0;
int score1=0;
BYTE old=0;
BYTE now;
int k0old,k0new,k7old,k7new;
k0old=old%2;
k7old=old/8;
while(1)
{
printf("\n当前分数:%d : %d\n",scoreleft,scoreright);
int yyy=5;
while(yyy--){
PortWriteByte(Port8255Base+2,0x01);
PortWriteByte(Port8255Base+1,led[scoreright%10]);
sleep(1); //delay 100ms
PortWriteByte(Port8255Base+2,0x02);
PortWriteByte(Port8255Base+1,led[scoreright/10]);
sleep(1);
PortWriteByte(Port8255Base+2,0x04);
PortWriteByte(Port8255Base+1,led[scoreleft%10]);
sleep(1); //delay 100ms
PortWriteByte(Port8255Base+2,0x08);
PortWriteByte(Port8255Base+1,led[scoreleft/10]);
sleep(1);
PortWriteByte(Port8255Base+2,0);
}
PortReadByte(Port8255Base + 2, &pdata);
pdata/=16;
sleep(500);
printf("--%d",pdata);
printf("old:%d new:%d\n",old,pdata);
if(old==pdata)
{
continue;
}
else
{
k7old=old/8;
k0old=old%2;
k0new=pdata%2;
k7new=pdata/8;
if(k7old!=k7new)
{
//printf("---here---\n");
again:
turnright();
old=pdata;
k0old=old%2;
PortReadByte(Port8255Base + 2, &now);
now/=16;
k0old=now%2;
if(speed2>50)
{
sleep(200);
PortReadByte(Port8255Base + 2, &reflect);
reflect/=16;
if(!(reflect==pdata))
{
pdata=reflect;
speedlamp=200;
goto r1;
}
else
{
sleep(100);
PortReadByte(Port8255Base + 2, &reflect);
reflect/=16;
if(!(reflect==pdata))
{
pdata=reflect;
speedlamp=1000;
goto r1;
}
else
{
sleep(100);
PortReadByte(Port8255Base + 2, &reflect);
reflect/=16;
if(!(reflect==pdata))
{
pdata=reflect;
speedlamp=4000;
goto r1;
}
else
{
sleep(100);
goto r2;
}
}
}
}
else
sleep(speed2);
r2:
PortReadByte(Port8255Base + 2, &pdata);
pdata/=16;
r1:
k0new=pdata%2;
printf("speedlamp:%d\n",speedlamp);
if(!(old!=pdata&&k0old!=k0new))
{
printf("\n--right lose--\n");
scoreleft++;
sleep(500);
PortReadByte(Port8255Base + 2, &pdata);
pdata/=16;
old=pdata;
k7old=old/8;
k0old=old%2;
k0new=pdata%2;
k7new=pdata/8;
}
else
{
printf("\nback\n");
turnleft();
old=pdata;
k7old=old/8;
PortReadByte(Port8255Base + 2, &now);
k7old=now/128;
if(speed2>50)
{
sleep(200);
PortReadByte(Port8255Base + 2, &reflect);
reflect/=16;
if(!(reflect==pdata))
{
pdata=reflect;
speedlamp=200;
goto r3;
}
else
{
sleep(100);
PortReadByte(Port8255Base + 2, &reflect);
reflect/=16;
if(!(reflect==pdata))
{
pdata=reflect;
speedlamp=1000;
goto r3;
}
else
{
sleep(100);
PortReadByte(Port8255Base + 2, &reflect);
reflect/=16;
if(!(reflect==pdata))
{
pdata=reflect;
speedlamp=4000;
goto r3;
}
else
{
sleep(100);
goto r4;
}
}
}
}
else
sleep(speed2);
r4:
PortReadByte(Port8255Base + 2, &pdata);
pdata/=16;
r3:
k7new=pdata/8;
if(!(old!=pdata&&k7old!=k7new))
{
printf("\n--left lose--\n");
scoreright++;
}
else
{
goto again;
}
}
}
else if(k0old!=k0new)
{
again2:
turnleft();
old=pdata;
k7old=old/8;
PortReadByte(Port8255Base + 2, &now);
k7old=now/128;
if(speed2>50)
{
sleep(200);
PortReadByte(Port8255Base + 2, &reflect);
reflect/=16;
if(!(reflect==pdata))
{
pdata=reflect;
speedlamp=200;
goto r7;
}
else
{
sleep(100);
PortReadByte(Port8255Base + 2, &reflect);
reflect/=16;
if(!(reflect==pdata))
{
pdata=reflect;
speedlamp=1000;
goto r7;
}
else
{
sleep(100);
PortReadByte(Port8255Base + 2, &reflect);
reflect/=16;
if(!(reflect==pdata))
{
pdata=reflect;
speedlamp=2000;
goto r7;
}
else
{
sleep(100);
goto r8;
}
}
}
}
sleep(speed2);
r8:
PortReadByte(Port8255Base + 2, &pdata);
pdata/=16;
r7:
k7new=pdata/8;
if(!(old!=pdata&&k7old!=k7new))
{
printf("\n--left lose--\n");
scoreright++;
sleep(500);
PortReadByte(Port8255Base + 2, &pdata);
pdata/=16;
old=pdata;
k7old=old/8;
k0old=old%2;
k0new=pdata%2;
k7new=pdata/8;
}
else
{
printf("\nback\n");
turnright();
old=pdata;
k7old=old/8;
PortReadByte(Port8255Base + 2, &now);
now/=16;
k0old=now%2;
if(speed2>50)
{
sleep(200);
PortReadByte(Port8255Base + 2, &reflect);
reflect/=16;
if(!(reflect==pdata))
{
pdata=reflect;
speedlamp=200;
goto r5;
}
else
{
sleep(100);
PortReadByte(Port8255Base + 2, &reflect);
reflect/=16;
if(!(reflect==pdata))
{
pdata=reflect;
speedlamp=100;
goto r5;
}
else
{
sleep(100);
PortReadByte(Port8255Base + 2, &reflect);
reflect/=16;
if(!(reflect==pdata))
{
pdata=reflect;
speedlamp=2000;
goto r5;
}
else
{
sleep(100);
goto r6;
}
}
}
}
sleep(speed2);
r6:
PortReadByte(Port8255Base + 2, &pdata);
pdata/=16;
r5:
k7new=pdata/8;
if(!(old!=pdata&&k0old!=k0new))
{
printf("\n--right lose--\n");
scoreleft++;
}
else
{
goto again2;
}
}
}
}
}
Cleanup();
}
void init8255(void)
{
if (!Startup())
{
printf("\n\n ERROR: Open Device Error!请打开实验箱电源\n");
_getch();
exit(0);
}
PortWriteByte(Port8255Base + 3, ControlWord8255);
}
void init8255B(void)
{
if (!Startup())
{
printf("\n\n ERROR: Open Device Error!请打开实验箱电源\n");
_getch();
exit(0); // return to Windows
}
PortWriteByte(Port8255Base + 3, ControlWord8255E);
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
java实现兵乓球比赛_C语言实现乒乓球比赛相关推荐
- java 比赛赛程_分治算法兵乓球比赛日程(java)
分治算法之兵乓球比赛日程 分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同.求出子问题的解,就可得到原问题的解.也就是字面上的解释是" ...
- 分治算法兵乓球比赛日程(java)
分治算法之兵乓球比赛日程 分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同.求出子问题的解,就可得到原问题的解.也就是字面上的解释是" ...
- 兵乓球- 经典街机游戏-python小游戏源码下载
兵乓球- 经典街机游戏.使用键盘上下移动拨片.第一个错过球的球员输了. 下载地址
- list object has no attribute ZScan_【恋爱体验】No.112丨大二男生,河南南阳,身高178,喜欢篮球、羽毛球、兵乓球、足球.........
哈喽啊,大家晚上好啊 又到了每天的恋爱体验时间 今天脱单了没有 为了让大家(自己)快速脱单 #恋爱体验#又上新啦 [恋爱体验]第 112 期 投稿人 关于自己的一些描述 喜欢篮球.羽毛球.兵乓 ...
- 大学生体育运动网页设计模板代码 校园兵乓球网页作业成品 学校篮球网页制作模板 学生简单体育运动网站设计成品
HTML5期末大作业:大学生体育网站设计--校园兵乓球(5页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码 常见网页设计作业 ...
- 乒乓球比赛赛程_2020年乒乓球比赛赛事赛程表(优个网独家整理)
国际乒联官网早早公布了2020年乒乓球赛事的重要赛程.2020年年初的最重要比赛,是3月底在韩国釜山进行的世乒赛团体赛.2020年7月25日-8月7日,东京奥运会乒乓球比赛将在东京国立代代木体育馆举行 ...
- java兵乓球队问题_Java两个乒乓球队比赛名单问题(判断素数)
题目:两个乒乓球队进行比赛,各出三人.甲队为a,b,c三人,乙队为x,y,z三人.已抽签决定比赛名单.有人向队员打听比赛的名单.a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单. 程序分 ...
- 蓝桥杯java和c语言区别_C语言蓝桥杯比赛原题和解析
蓝桥杯:在计算机编程领域,是具有一定含金量的竞赛,用于选拔信息技术人才. 一般分为多个领域,其中包含了C/C#/C++/Java/Python等编程语言的测试题,多为算法的设计题. 下面,在搜题过程中 ...
- 用JAVA定义两个结构体_c语言struct结构体的定义和使用
c语言由于不像java,c#,c++等语言有对象,所以就用struct结构体来表示,其实作用是差不多的,下面来快速学习c语言struct结构体的定义和使用,以学生类student来举例,有三种定义方式 ...
最新文章
- darknet53网络结构及配置文件对比
- Nhibernate常见的错误
- 34.2. terminal
- C++ string字符串比较问题
- 电子政务“云”成大势
- SAP UI5 js file will be executed immediately after downloaded successfully
- 第7步 mybatis-generator dao层生成器
- 左移和右移运算符的重载问题(里面的绝对盲点)在做了一遍,还是出错了
- Leetcode 100.相同的树
- W-3 用grub4dos安装Windows7、Ubuntu 12.10双系统(图解)
- 文本文档如何运行c语言代码,C程序员如何创建、打开、关闭文本文件或二进制文件...
- 使用QT调用FFMPEG库部署到Android设备、完成视频音频应用开发
- openWRT提示JFFS2-partition seems full
- linux dos2unix用法,Linux命令之dos2unix
- JSONObject将json字符串转成java嵌套对象
- 西部世界:币本位是什么?
- android 8.0 红米note3,红米Note3抢在小米6前面升到8.0,但是bug满天飞
- 中国民族博览杂志中国民族博览杂志社中国民族博览编辑部2022年第7期目录
- Java Web学习笔记 3 深入Servlet技术
- ae如何把已有图片当做蒙版_AE遮罩教程,如何用AE创建文字蒙版遮罩