91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言實現乒乓球比賽的實例分析

發布時間:2020-07-21 14:20:06 來源:億速云 閱讀:294 作者:小豬 欄目:編程語言

這篇文章主要講解了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); 
}

看完上述內容,是不是對C語言實現乒乓球比賽的實例分析有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

惠州市| 富裕县| 柘荣县| 长泰县| 永胜县| 铁岭县| 五莲县| 永泰县| 朔州市| 丹寨县| 北海市| 嘉善县| 尚义县| 从江县| 伊川县| 勃利县| 贡山| 思茅市| 安庆市| 尼木县| 平阳县| 柯坪县| 彭泽县| 聂荣县| 霍城县| 寿阳县| 盘山县| 南通市| 长乐市| 阳新县| 通海县| 巩留县| 宝坻区| 涿州市| 瓦房店市| 牡丹江市| 五常市| 客服| 霸州市| 平塘县| 万载县|