글수 39
[밥통이와 겜 만들기 1탄] 준비물
오늘 겜을 만들려면 무엇이 필요한지 대충 공부해 보자!!
[필요한 물건]
일단 컴퓨터가 있어야 한다.. 우움. 키보드, 모니터 달린 잘 작동되어야 한다. 운영체제는 윈도우가 깔려있으면 아주 좋다..
그리고 100타 이상의 타자 실력이 있어야 한다.. 타자가 넘 느리면 아주 곤란하다..
어! a가 어디있지 하면서 찾아보고 치고 그러면 아마 게임을 만들려면 100년은 걸릴 것이다.. -_- (내 이야기군)
그리고 컴퓨터 프로그램 언어를 알아야 한다.. 그중에 C나 C++을 알면 아주 좋다. 그 외 언어로는 델파이, 비주얼 베이직등등.. 아주 많이 있다.
현재 아는 언어가 없다면, 걍 연습장에 비행기 그리고 미사일 그리고 그렇게 만들면 된다. 비행기가 미사일에 맞아서 터지면, 지우개로 간단히 지워주면 된다.. (하하~ 내가 현재 많이 하는 짓)
아무튼 프로그램 언어를 알아야 한다는게 중요하다.. 그러면 10000인이 애용하는 C나 C++로 이용해 함 만들어 보자.. 좋아!!
이제 도화지는 필요없다. 우리에겐 터보C가 필요하다!! 그런데 터보C를 넘 구닥다리 버전이라 쓰기가 싫어졌다..
그럼 요즘에 잘 나가는 gcc컴파일러를 쓰는 DevC++을 이용해 만들도록 하자.. 비주얼C++도 상관없다.. (걍 알아서 구하자)
이제 예습하는 겸 C언어에 대해 살펴보자..
[code]
#include <stdio.h>
int main()
{
printf("게임을 시작\n");
printf("게임 끝\n");
getchar();
return 0;
}
[/code]
영어가 많이 보인다.. 위와같은 것을 소스 코드(source code)라 한다. 아무튼 위에 소스를 컴파일(메뉴에영어로 써 있음)하고 실행하게 되면, "게임 시작"과 "게임 종료"가 출력된다. 앞으로 만들 게임의 기본 골격이 되겠다. 자세한건 C언어 책 1장에 찾아보면 첫번째 예제로 나온다.
하루에 너무 많이 만들면 머리도 아프고, 아는것도 까먹으니 오늘은 이정도만 만들겠다.
그러면 지금까지의 내용을 정리하자..
잘 돌아가는 윈도우가 깔린 컴퓨터와 C/C++ 컴파일러와 평균 100이상의 타자 실력이 있으면 되겠다. 그리고 앞으로 만들 게임의 골격을 만들어 보았다.
ps.. 격려의 말씀은 아끼지 마시고 써주세요.. 쓰고보니 돌 맞을까봐 두려워요 T.T (벌렁~벌렁~)
------------------------
저자:밥통
MSN:textout@msn.com
------------------------
오늘 겜을 만들려면 무엇이 필요한지 대충 공부해 보자!!
[필요한 물건]
일단 컴퓨터가 있어야 한다.. 우움. 키보드, 모니터 달린 잘 작동되어야 한다. 운영체제는 윈도우가 깔려있으면 아주 좋다..
그리고 100타 이상의 타자 실력이 있어야 한다.. 타자가 넘 느리면 아주 곤란하다..
어! a가 어디있지 하면서 찾아보고 치고 그러면 아마 게임을 만들려면 100년은 걸릴 것이다.. -_- (내 이야기군)
그리고 컴퓨터 프로그램 언어를 알아야 한다.. 그중에 C나 C++을 알면 아주 좋다. 그 외 언어로는 델파이, 비주얼 베이직등등.. 아주 많이 있다.
현재 아는 언어가 없다면, 걍 연습장에 비행기 그리고 미사일 그리고 그렇게 만들면 된다. 비행기가 미사일에 맞아서 터지면, 지우개로 간단히 지워주면 된다.. (하하~ 내가 현재 많이 하는 짓)
아무튼 프로그램 언어를 알아야 한다는게 중요하다.. 그러면 10000인이 애용하는 C나 C++로 이용해 함 만들어 보자.. 좋아!!
이제 도화지는 필요없다. 우리에겐 터보C가 필요하다!! 그런데 터보C를 넘 구닥다리 버전이라 쓰기가 싫어졌다..
그럼 요즘에 잘 나가는 gcc컴파일러를 쓰는 DevC++을 이용해 만들도록 하자.. 비주얼C++도 상관없다.. (걍 알아서 구하자)
이제 예습하는 겸 C언어에 대해 살펴보자..
[code]
#include <stdio.h>
int main()
{
printf("게임을 시작\n");
printf("게임 끝\n");
getchar();
return 0;
}
[/code]
영어가 많이 보인다.. 위와같은 것을 소스 코드(source code)라 한다. 아무튼 위에 소스를 컴파일(메뉴에영어로 써 있음)하고 실행하게 되면, "게임 시작"과 "게임 종료"가 출력된다. 앞으로 만들 게임의 기본 골격이 되겠다. 자세한건 C언어 책 1장에 찾아보면 첫번째 예제로 나온다.
하루에 너무 많이 만들면 머리도 아프고, 아는것도 까먹으니 오늘은 이정도만 만들겠다.
그러면 지금까지의 내용을 정리하자..
잘 돌아가는 윈도우가 깔린 컴퓨터와 C/C++ 컴파일러와 평균 100이상의 타자 실력이 있으면 되겠다. 그리고 앞으로 만들 게임의 골격을 만들어 보았다.
ps.. 격려의 말씀은 아끼지 마시고 써주세요.. 쓰고보니 돌 맞을까봐 두려워요 T.T (벌렁~벌렁~)
------------------------
저자:밥통
MSN:textout@msn.com
------------------------
2005.04.19 21:43:22 (*.223.114.211)
#include<stdio.h>
#include<stdlib.h>
/*programmed by jki*/
/*어떻게 강의보고 응용해서 나름대로 만들어봤습니다. 만들다보니 실력의한계.
많이 느끼고. 배운것도 많고. 또, 프로그램이 main은 딸랑 한 줄인데, 다른 사용자
정의함수가 몸통이 커져버렸습니다. 기형프로그램인지 어쩐지 모르겠지만, 나름대로
만들었다는데 의의를 두고 있습니다. 에휴~ 역시 듣는거랑 적용은 차이가 많이
나네요. 이상 주저리 잡담이었습니다. 행복하세요^^*/
/*쉽게 해독하실려면, 우선 main함수부터 알고리즘을 쭉 따라가시면 대강적인 알고리즘은
잡힐겁니다.*/
/*반복 알고리즘 함수(한번알고리즘이끝난후에다시반복가능하게한다)*/
void more()
{
int m;
printf("\n한번더???(y:1/n:0)\n");
scanf("%d",&m);
if(m==1) /* m값이 1이면*/
{
GameInput(); /* 게임진행함수를 호출한다(반복을 의미)*/
}
else if(m==0) /* 0을 선택하면*/
{
printf("안녕~\n"); /*프로그램을 끝낸다*/
}
else
printf("예기치 않은 행동..프로그램을 중지합니다!\n"); /*다른 자판 누룰시에 프로그램을 끝낸다*/
}
int GetRand(int low, int max) /*컴퓨터의 수 구현 함수 .난수로 계산.(1-3까지의수)*/
{
return (rand()%(max+1-low))+low; /*1과3사이에서 난수가 구해진다. 근데 이상하게 같은 값만 나온다. 더 연구 필*/
}
/*승부 도출 함수리즘및 반복리즘의 적용 */
void A(int key)
{
int com=GetRand(1,3); /*컴퓨터의 수*/
int result=key-com; /*유저와 컴퓨터 대결 결과*/
switch(com) /*컴퓨터의 수를 문자로 표현*/
{
case 1:
printf("컴퓨터:가위\n"); /*컴퓨터가 뭘 냈는지 표현*/
break;
case 2:
printf("컴퓨터:바위\n");
break;
case 3:
printf("컴퓨터:보\n");
break;
}
switch(result) /*승부를 문자로 표현*/
{
case -2:
printf("\n당신이 이겼습니다\n");
more(); /* 바로 이 구문의 호출이 반복을 가능하게 한다.*/
break;
case 1:
printf("\n***당신이 이겼습니다***\n");
more();
break;
case -1:
printf("\n***당신이 졌습니다***\n");
more();
break;
case 2:
printf("\n***당신이 졌습니다***\n");
more();
break;
case 0:
printf("\n***비겼습니다***\n");
more();
break;
default:
printf("\n***시스템 에러입니다***\n");
break;
}
}
/*유저의 수*/
GameInput() /*가위,바위,보 게임 골격 및 유저 입력 함수 */
{
int key; /*가위바위보 입력변수*/
printf("//가위바위보 게임입니다//\n");
printf("(1:가위 2:바위 3:보 0:종료)\n ");
printf("당신의 수는 ?\n");
scanf("%d",&key); /*키를 입력받는다*/
if(key==1) /*유저가 가위냈을때*/
{
printf("유저:가위\n");
A(1); /*승부도출함수 실행*/
}
else if(key==2) /*유저가 바위냈을때*/
{
printf("유저:바위\n");
A(2);
}
else if(key==3) /*유저가 보냈을때*/
{
printf("유저:보\n");
A(3);
}
else if(key>3) /*규칙에 벗어날시 코드*/
{
printf("다시 입력하세요.\n");
GameInput();
}
else if(key==0) /*종료하고자 할때 알고리즘*/
{
printf("종료하시겠습니까?<y:1/n:0>\n");
scanf("%d",&key);
if(key==1)
{
printf("종료합니다\n");
}
else
{
printf("다시 시작합니다.\n ");
GameInput();
}
}
}
/* main함수시작*/
int main()
{
GameInput(); /*함수 호출^^;*/
}
#include<stdlib.h>
/*programmed by jki*/
/*어떻게 강의보고 응용해서 나름대로 만들어봤습니다. 만들다보니 실력의한계.
많이 느끼고. 배운것도 많고. 또, 프로그램이 main은 딸랑 한 줄인데, 다른 사용자
정의함수가 몸통이 커져버렸습니다. 기형프로그램인지 어쩐지 모르겠지만, 나름대로
만들었다는데 의의를 두고 있습니다. 에휴~ 역시 듣는거랑 적용은 차이가 많이
나네요. 이상 주저리 잡담이었습니다. 행복하세요^^*/
/*쉽게 해독하실려면, 우선 main함수부터 알고리즘을 쭉 따라가시면 대강적인 알고리즘은
잡힐겁니다.*/
/*반복 알고리즘 함수(한번알고리즘이끝난후에다시반복가능하게한다)*/
void more()
{
int m;
printf("\n한번더???(y:1/n:0)\n");
scanf("%d",&m);
if(m==1) /* m값이 1이면*/
{
GameInput(); /* 게임진행함수를 호출한다(반복을 의미)*/
}
else if(m==0) /* 0을 선택하면*/
{
printf("안녕~\n"); /*프로그램을 끝낸다*/
}
else
printf("예기치 않은 행동..프로그램을 중지합니다!\n"); /*다른 자판 누룰시에 프로그램을 끝낸다*/
}
int GetRand(int low, int max) /*컴퓨터의 수 구현 함수 .난수로 계산.(1-3까지의수)*/
{
return (rand()%(max+1-low))+low; /*1과3사이에서 난수가 구해진다. 근데 이상하게 같은 값만 나온다. 더 연구 필*/
}
/*승부 도출 함수리즘및 반복리즘의 적용 */
void A(int key)
{
int com=GetRand(1,3); /*컴퓨터의 수*/
int result=key-com; /*유저와 컴퓨터 대결 결과*/
switch(com) /*컴퓨터의 수를 문자로 표현*/
{
case 1:
printf("컴퓨터:가위\n"); /*컴퓨터가 뭘 냈는지 표현*/
break;
case 2:
printf("컴퓨터:바위\n");
break;
case 3:
printf("컴퓨터:보\n");
break;
}
switch(result) /*승부를 문자로 표현*/
{
case -2:
printf("\n당신이 이겼습니다\n");
more(); /* 바로 이 구문의 호출이 반복을 가능하게 한다.*/
break;
case 1:
printf("\n***당신이 이겼습니다***\n");
more();
break;
case -1:
printf("\n***당신이 졌습니다***\n");
more();
break;
case 2:
printf("\n***당신이 졌습니다***\n");
more();
break;
case 0:
printf("\n***비겼습니다***\n");
more();
break;
default:
printf("\n***시스템 에러입니다***\n");
break;
}
}
/*유저의 수*/
GameInput() /*가위,바위,보 게임 골격 및 유저 입력 함수 */
{
int key; /*가위바위보 입력변수*/
printf("//가위바위보 게임입니다//\n");
printf("(1:가위 2:바위 3:보 0:종료)\n ");
printf("당신의 수는 ?\n");
scanf("%d",&key); /*키를 입력받는다*/
if(key==1) /*유저가 가위냈을때*/
{
printf("유저:가위\n");
A(1); /*승부도출함수 실행*/
}
else if(key==2) /*유저가 바위냈을때*/
{
printf("유저:바위\n");
A(2);
}
else if(key==3) /*유저가 보냈을때*/
{
printf("유저:보\n");
A(3);
}
else if(key>3) /*규칙에 벗어날시 코드*/
{
printf("다시 입력하세요.\n");
GameInput();
}
else if(key==0) /*종료하고자 할때 알고리즘*/
{
printf("종료하시겠습니까?<y:1/n:0>\n");
scanf("%d",&key);
if(key==1)
{
printf("종료합니다\n");
}
else
{
printf("다시 시작합니다.\n ");
GameInput();
}
}
}
/* main함수시작*/
int main()
{
GameInput(); /*함수 호출^^;*/
}
2005.08.26 22:35:54 (*.91.96.158)
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<windows.h>
char map[20][30];
int x,y;
void main()
{
int jx=0,jy=0,i,j;
x=10,y=10;
printf("오늘의 목표 : 몬스터 AI .. \n");
map[x][y]='_';
map[x][y-1]='-';
map[x][y+1]='-';
while(1)
{
system("cls");
for(i=0;i<20;i++)
{
for(j=0;j<30;j++)
{
if(map[i][j]=='-'||map[i][j]=='_');
else map[i][j]=' ';
}
}
if(jy>=0)map[jx][jy++]='1';
if(jy>28) map[jx++][jy]='1';
if(jx>18) map[jx=0][jy=0]='1';
for(i=0;i<20;i++)
{
for(j=0;j<30;j++)
{
printf("%c",map[i][j]);
}
printf("\n");
}
if(kbhit())
{
int key;
int i,j;
for(i=0;i<20;i++)
{
for(j=0;j<30;j++)
{
map[i][j]=' ';
}
}
key=getch();
if(key==119)
{
x-=1;
if(x<0) x+=1;
map[x][y]='_';
map[x][y-1]='-';
map[x][y+1]='-';
}
else if(key==115)
{
x+=1;
if(x>=20) x-=1;
map[x][y]='_';
map[x][y-1]='-';
map[x][y+1]='-';
}
else if(key==97)
{
y-=1;
if(y<=0) y+=1;
map[x][y]='_';
map[x][y-1]='-';
map[x][y+1]='-';
}
else if(key==100)
{
y+=1;
if(y>28) y-=1;
map[x][y]='_';
map[x][y-1]='-';
map[x][y+1]='-';
}
}
if(map[x][y]=='1'||map[x][y-1]=='1'||map[x][y+1]=='1') break;
Sleep(100);
}
}
#include<conio.h>
#include<stdlib.h>
#include<windows.h>
char map[20][30];
int x,y;
void main()
{
int jx=0,jy=0,i,j;
x=10,y=10;
printf("오늘의 목표 : 몬스터 AI .. \n");
map[x][y]='_';
map[x][y-1]='-';
map[x][y+1]='-';
while(1)
{
system("cls");
for(i=0;i<20;i++)
{
for(j=0;j<30;j++)
{
if(map[i][j]=='-'||map[i][j]=='_');
else map[i][j]=' ';
}
}
if(jy>=0)map[jx][jy++]='1';
if(jy>28) map[jx++][jy]='1';
if(jx>18) map[jx=0][jy=0]='1';
for(i=0;i<20;i++)
{
for(j=0;j<30;j++)
{
printf("%c",map[i][j]);
}
printf("\n");
}
if(kbhit())
{
int key;
int i,j;
for(i=0;i<20;i++)
{
for(j=0;j<30;j++)
{
map[i][j]=' ';
}
}
key=getch();
if(key==119)
{
x-=1;
if(x<0) x+=1;
map[x][y]='_';
map[x][y-1]='-';
map[x][y+1]='-';
}
else if(key==115)
{
x+=1;
if(x>=20) x-=1;
map[x][y]='_';
map[x][y-1]='-';
map[x][y+1]='-';
}
else if(key==97)
{
y-=1;
if(y<=0) y+=1;
map[x][y]='_';
map[x][y-1]='-';
map[x][y+1]='-';
}
else if(key==100)
{
y+=1;
if(y>28) y-=1;
map[x][y]='_';
map[x][y-1]='-';
map[x][y+1]='-';
}
}
if(map[x][y]=='1'||map[x][y-1]=='1'||map[x][y+1]=='1') break;
Sleep(100);
}
}
