//말달리기 게임
#include <stdio.h>
#include <time.h>
#include <conio.h>
#include <windows.h>
#define randomsize() srand((unsigned)time(NULL))
#define random(x) rand()%(x)
void gotoxy(int x, int y)
{
 COORD Pos={x,y};
 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),Pos);
}
void main()
{
 int sec,ms;
 double ti,st,en;
 int x[5]={3,3,3,3,3}, y=2, z[5]={1,1,1,1,1},a,i,loop=1;
 randomsize();
 st=clock();
 for(i=1;i<15;i++)
 {
  gotoxy(56,i);
  printf("|");
 }
 while (loop=1)
 {
  for(i=0;i<5;i++)
  {
   if (z[i]==1)
   {
    gotoxy(x[i],y+i*2); printf("~-===*");
    gotoxy(x[i],y+i*2+1); printf(" `./");
   }
   else
   {
    gotoxy(x[i],y+i*2); printf("'-===+");
    gotoxy(x[i],y+i*2+1); printf(" / '.");
   }
  }
  en=clock();
  gotoxy(20,17);
  ti=(en-st)/1000;
  sec=(int)ti;
  ms=(int)((ti-sec)*100);
  printf("%d 초 %d",sec,ms);

  Sleep(100);
  for(i=0;i<5;i++)
  {
   if (x[i]>50) loop=0;
   else
   {    
   }
  }
  if (loop==1)
  {
   for(i=0;i<5;i++)
   {
    gotoxy(x[i],y+i*2); printf("     ");
    gotoxy(x[i],y+i*2+1); printf("     ");
    a=random(3);
    if(a==1)
    {
     x[i]++;
     z[i]=-z[i];
    }
   }
  }
 }
 gotoxy(2,20);
 //printf(%d Win!!", );
}
//말달리기 게임 - 라인넘버와 우승말 표시
#include <stdio.h> // printf, scanf
#include <time.h> // clock
#include <conio.h> // getch, putch, kbhit
#include <windows.h> // gotoxy
#define randomsize() srand((unsigned)time(NULL)) 
// srand:랜덤으로 같은 숫자만 출력되는걸 방지하기위해 난수발생함수 srand를 사용함
// 위와같이 복잡하게 쓰는것을 아래처럼 간단히 정의하여 사용
#define random(x) rand()%(x)
void gotoxy(int x, int y) // 좌표설정
{
 COORD Pos={x,y};
 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),Pos);
}
void main()
{
 int mal[]={1,2,3,4,5,6};
 int sec,ms,po; // (sec)초(ms) po:말번호(아래에서 우승 말 표시)
 double ti,st,en; // 시간은 실수이므로 double
 int x[5]={3,3,3,3,3}, y=2, z[5]={1,1,1,1,1},a,i,loop=1; // 첫 시작위치는 x=3
 randomsize();
 st=clock(); // 출발 시각
 
 //시작 지점에 말 번호 표시
 for(i=1;i<6;i++)
 {
  gotoxy(1,y+i*2);
  printf("%d",i);
 }
 
 // 도착지점에 라인 표시
 for(i=1;i<15;i++)
 {
  gotoxy(56,i); 
  printf("|");
 }
 while (loop==1)
 {
  for(i=0;i<5;i++)
  {
   if (z[i]==1) // 출발하는 모양은 똑같다.
   {
    gotoxy(x[i],y+i*2); printf("~-===*"); // 초기치 x=3,y=2 => (3,2)에 출력되는 모양
    gotoxy(x[i],y+i*2+1); printf(" `./");
   }
   else
   {
    gotoxy(x[i],y+i*2); printf("'-===+");
    gotoxy(x[i],y+i*2+1); printf(" / '.");
   }
  }
  en=clock(); // 도착시각
  gotoxy(20,17); // 실행시각 표시좌표
  ti=(en-st)/1000; // 실제 걸린 시간 = 도착-출발
  sec=(int)ti; // 시간을 정수화 한다.
  ms=(int)((ti-sec)*100);
  printf("%d 초 %d",sec,ms);

  Sleep(100); // 1/10초 대기
  for(i=0;i<5;i++)
  {
   if (x[i]>50) 
    
   {
    loop=0; // 말의 위치가 50 이하면 계속 loop (말의 길이는 6), i는 말의 이름(1번말, 2번말)..
    po=i;
   }
   else
   {    
   }
  }
  if (loop==1)
  {
   for(i=0;i<5;i++)
   {
    gotoxy(x[i],y+i*2); printf("     "); // clear. 말 다리가 달린 후 지워지도록.
    gotoxy(x[i],y+i*2+1); printf("     ");
    a=random(3); // 랜덤 출력 함수(3으로 나눈 정수:0,1,2)-각각 확률이 33%, 숫자가 커지면 속도가 느려진다.
    if(a==1)
    {
     x[i]++; // 첫 값은 4
     z[i]=-z[i]; // 말 다리가 앞뒤로 교대
    }
   }
  }
 }
 gotoxy(40,17);
 printf("%d 번 말 우승 \n", po+1);
}
// 키보드이용 움직이기
#include <stdio.h>
#include <windows.h>
#include <conio.h>
void gotoxy(int x, int y)
{
 COORD Pos={x-1,y-1};
 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),Pos);
}

void main()
{
 int x,y,bk,key,track;
 x=10;
 y=5;
 track=0;

 while(1)
 {
  gotoxy(1,1);
  printf("x:%3d y:%3d",x,y);
  gotoxy(x,y);
  printf("♥");
  key=getch();
  
  // 상하로 움직일때 이전 하트를 삭제
  if(track==0)
  {
   gotoxy(x,y);
   printf(" ");
  }
  if(key!=224)
  {
   if(key=='a' || key=='A' || key==52) if(x>1) x=x-1; 
   if(key=='d' || key=='D' || key==54) if(x<50) x=x+1;
   if(key=='w' || key=='W' || key==56) if(y>1) y=y-1;
   if(key=='s' || key=='S' || key==50) if(y<25) y=y+1;
   // 52,54,56,50 : 4,6,8,2 숫자키패드
  }
  else if(key==224)
  {
   bk=getch();
   if(bk==75) if(x>1) x=x-1; // 좌
   if(bk==77) if(x<50) x=x+1; // 우
   if(bk==72) if(y>1) y=y-1; //상
   if(bk==80) if(y<25) y=y+1; // 하 방향키
  }
  if(key=='q' || key=='Q' || key==55)
   if(y>1 && x>1) {x=x-2;y=y-1;} // 좌상측 대각선 x는 2씩, y는 1씩 변경
  if(key=='e' || key=='E' || key==57)
   if(y>1 && x<50) {x=x+2;y=y-1;} // 우상
  if(key=='z' || key=='Z' || key==49)
   if(y<25 && x>1) {x=x-2;y=y+1;} //좌하
  if(key=='c' || key=='C' || key==51)
   if(y<25 && x<50) {x=x+2;y=y+1;} //우하
  if(key == 32) if (track==0) track=1; else track=0; // space bar
  if(key == 27) system("cls"); //esc
  if(key == 13) //enter
  {
   gotoxy(x,y);printf("STOP\n");
   break;
  }
 }
}
//청기 백기 들기
#include <stdio.h> 
#include <time.h>  
#include <conio.h> 
#include <windows.h> 
#define randomize() srand((unsigned)time(NULL))
#define random(x) rand()%(x)
void gotoxy(int x, int y)
{
 COORD Pos = {x, y};
 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}
int ti=3000,t=0;
void init();
void main()
{
 int ks,q,sq,i,p=0;
 char ki[15],ski[15],c1[6],s1[6]; // ki:사용자응답, ski:컴퓨터
 init();
  randomize();//난수 발생 
  strcpy(ski,"          ");//지정된 위치에 클리어 
  strcpy(ki,"          ");//지정된 위치에 클리어 
  gotoxy(5,2);//지정된 위치에 클리어 
  printf("%s",ki); //지정된 위치에 클리어 
  gotoxy(5,4);//지정된 위치에 클리어 
  printf("%s",ski);//지정된 위치에 클리어 
  gotoxy(5,6);//지정된 위치에 클리어 
  printf("%s",ski);//지정된 위치에 클리어 
  strcpy(c1,"[ 컴 ]");
  strcpy(s1,"[사람]");

 while(1)
 { 
  gotoxy(5,2); // 컴퓨터 출력 위치
  printf("%s",c1); 
  gotoxy(5,4); // 사람 출력 위치
  printf("%s",s1);
  
  for(i=1;i<=10;i++) //10회 반복 하기 위해
  { 
   ks=random(4); //난수 0~3까지 발생 ...컴퓨터가 발생 
   if(ks==0)
   strcpy(ki," 청기올려!!");
   else if(ks==1)
   strcpy(ki," 청기내려!!");
   else if(ks==2)
   strcpy(ki," 백기올려!!");
   else if(ks==3)
   strcpy(ki," 백기내려!!");
    gotoxy(11,2); //컴이 생각한 것을 표시 하는 위치 
    printf("%s",ki); // 
       gotoxy(12,4); //사람이 컴에 대응 ... 
    Sleep(100);
    sq=getch();
  if(sq=='a' || sq=='A')//a 나 A이면 청기 올려 대응 
   strcpy(ski," 청기올려!!");
  else if(sq=='z' || sq=='Z')
   strcpy(ski," 청기내려!!");
  else if(sq=='d' || sq=='D')
   strcpy(ski," 백기올려!!");
  else if(sq=='c' || sq=='C')
   strcpy(ski," 백기내려!!");
  else if(sq=='0') 
   strcpy(ski,"시간초과!!");
   gotoxy(11,4); //사용자가 대응한 것을 표시 
   printf("%s",ski); 
   ks=strcmp(ki,ski); //컴 과 사용자가 같으면 결과가 0으로 반환 
   if(ks==0)// 컴 과 사용자가 같으면 즉 결과가 0 이면 맞추었으면 ..
   p++;// 횟수 증가 ... 
   gotoxy(11,4);
   printf("%s",ski);
   Sleep(100);
   strcpy(ski,"           ");
   gotoxy(11,4);
   printf("%s",ski);
  }
  //FOR~END 10번 반복 
    if(p>=8)//맞힌 횟수가 8번이상이면 
    { gotoxy(5,6);
     printf("%d.. 매우 민첩!!",p);
    }
    else if(p>=4)//맞힌 횟수가 4번이상이면 
    {gotoxy(5,6);
     printf("%d .. 속도가 보통 !!",p);
    }
    else //맞힌 횟수가 3번이하  이면 
    {
     gotoxy(5,6);
     printf("%d .. 노력!!",p);
    }
    p=0;
    gotoxy(1,20);
    printf("계속하실래요?(Y/N)");
    q=getch();
    if(q=='n' || q=='N')
     break;
    else // 계속할려면 표시된 위치의 모든 문자를 클리어
    { 
    t=t+1000; // 화면이 바뀔 때마다 더 빨라지게
     init();
    }
 }//whie~~end 
}

void init()
{
  system("cls");
  gotoxy(25,9);
  printf("3초후에 실행 !!");
  gotoxy(25,11);
  printf("A => 청기 올려 !!");
  gotoxy(25,12);
  printf("Z => 청기 내려 !!");
  gotoxy(25,13);
  printf("D => 백기 올려 !!");
  gotoxy(25,14);
  printf("C => 백기 내려 !!");
  if(t>=3000)
  t=2000;
  Sleep(ti-t); // 대기시각
  system("cls");
}
조회 수 :
1572
등록일 :
2010.11.08
14:14:43 (*.118.91.251)
엮인글 :
http://wwwww.kr/30859/3fa/trackback
게시글 주소 :
http://wwwww.kr/30859
List of Articles
번호 제목 글쓴이 날짜 조회 수
» day 18 말달리기게임, 청기백기, 키보드이용 움직이기 [레벨:9]NANASE 2010-11-08 1572
17 day 17 포함관계,try,catch,while,for,virtual,exception,예외처리 [레벨:9]NANASE 2010-11-08 1517
16 day 16 상속,inheritage,문자열,배열,포인터,동적객체, 멤버초기화 [레벨:9]NANASE 2010-11-01 1977
15 day 15 연산자 오버로딩, friend, 객체배열, 전역함수,단항연산 [레벨:9]NANASE 2010-10-28 2111
14 day 14 template, 동적객체, 생성자, 소멸자, this [레벨:9]NANASE 2010-10-27 1918
13 day 13 overloading,const,swap,get,set,define [레벨:9]NANASE 2010-10-26 3098
12 day 12 get, set, class [레벨:9]NANASE 2010-10-25 2454
11 day11 class, c++ [레벨:9]NANASE 2010-10-22 2167
10 day 10 매크로,함수,구조체,달팽이배열,ㄹ배열,로또,마방진 [레벨:9]NANASE 2010-10-21 2206
9 day 9 getch, 구조체, 파일의 처리 [레벨:9]NANASE 2010-10-20 2215
8 day 8 배열,포인터,함수 [레벨:9]NANASE 2010-10-19 2841
7 day 7 함수 [레벨:9]NANASE 2010-10-18 1332
6 day 6 [레벨:9]NANASE 2010-10-14 1142
5 day 5 [레벨:9]NANASE 2010-10-13 1159
4 day 4 [레벨:9]NANASE 2010-10-13 1454
3 day 3 [레벨:9]NANASE 2010-10-13 1409
2 day 2 [레벨:9]NANASE 2010-10-08 1947
1 day 1 [레벨:9]NANASE 2010-10-07 1324



XE Login