C 언어 탁구 경기 실현

10630 단어 C 언어탁구시합
본 고 는 사례 를 통 해 C 언어 로 탁구 경 기 를 실현 하 는 구체 적 인 코드 를 공유 하고 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
1)기본 요구
LED 발광 관(빨간색,노란색,녹색)8 개의 스크롤 디 스 플레이 로 탁 구 를 칠 때 탁구 가 양쪽 탁구대 에서 왔다갔다 하 는 운동 을 모 의 한다.경기 쌍방 은 버튼/스위치(쌍방 은 각각 1 개의 버튼/스위치)의 방법 으로 서브 와 리시브 를 모 의 한다.즉,서브 하 는 측 이 제어 하 는 버튼/스위치/건 을 누 르 고 공 은 서브 하 는 측 에서 상대방 을 향 해 운동 한다(LED 발광 관 은 서브 하 는 측 에서 상대방 까지 하나하나 밝 히 고 스크롤 디 스 플레이).공이 리시브 하 는 측 까지 운동 할 때 리시브 하 는 측 이 바로 제어 하 는 버튼/스위치/키 를 누른다.'타격'은 공 을 서브 하 는 쪽 에 튕 기 게 한다.이렇게 반복 해서 규정된 타격 시간 에 한 쪽 이 타격 동작 을 완성 하지 못 해서 상대방 이 1 점 을 얻 은 후에 경 기 를 계속 한다.경기 규칙 은 일반적인 탁구 경기 규칙 을 참조 할 수 있다.
요청:
(1).공 은 0.5 초 마다 LED 1 개 를 굴 리 는 속도 로 이동한다.
(2)리 턴 은 공이 도착 한 후 0.5 초 안에(버튼 을 누 르 고)해 야 하 며 그렇지 않 으 면 실 점 계 를 눌 러 야 한다.
(3).공이 도착 하지 않 으 면 미리 버튼 을 누 르 고 실 점 처 리 를 누 르 면 리 턴 작용 을 하지 않 는 다.
(4).확 장 된 4 개의 7 단 디지털(작은 키보드 에)로 쌍방 에 게 점 수 를 매 긴 다(각 방 2 개의 8 단 코드,10 진법 으로 계산 하고 초기 값 은 00:00 이 며 자체 적 으로 디 스 플레이 와 규칙 을 설계 할 수 있다).
2)、디자인 팁
공이 리시브 측 에 도착 하면 바로 리시브 측의 버튼 상 태 를 읽 고 누 르 지 않 으 면 유효 하 다(이미 누 르 면 실 점 계 를 누 르 고).그리고 이 버튼 상 태 를 계속 읽 고'타격'동작 을 대표 할 때 까지 계속 읽는다.(인 터 럽 트 를 사용 하여 같은 버튼 으로 돌아 가면 서 식별 할 수 있 습 니 다.
3)추가 설계 요구
(1).×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 
",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
",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("
:%d : %d
",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
",old,pdata); if(old==pdata) { continue; } else { k7old=old/8; k0old=old%2; k0new=pdata%2; k7new=pdata/8; if(k7old!=k7new) { //printf("---here---
"); 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
",speedlamp); if(!(old!=pdata&&k0old!=k0new)) { printf("
--right lose--
"); 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("
back
"); 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("
--left lose--
"); 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("
--left lose--
"); 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("
back
"); 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("
--right lose--
"); scoreleft++; } else { goto again2; } } } } } Cleanup(); } void init8255(void) { if (!Startup()) { printf("

ERROR: Open Device Error!
"); _getch(); exit(0); } PortWriteByte(Port8255Base + 3, ControlWord8255); } void init8255B(void) { if (!Startup()) { printf("

ERROR: Open Device Error!
"); _getch(); exit(0); // return to Windows } PortWriteByte(Port8255Base + 3, ControlWord8255E); }
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기