메뉴 건너뛰기

BLENDING

자유 게시판

아주 예전에.. 얄팍한 지식으로 업다운게임을 만들었는데요.. 문제가..

12정태식2012.03.27 23:06조회 수 12213추천 수 2댓글 16

    • 글자 크기

혼자 했기에 물어볼 때도 없어서 지금 물어보네요..

 

 

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

 

main(){//main start
 int  com_a, user_a; // 플레이어 정답
 int  call, answer; // 임시변수


 int  player=1;

 

 com_a = rand()%101; // 0-100
 printf("user's answer : ");
 scanf("%d",&user_a);

 printf(" Game Start n");
 while(1){//while(1) start
  //call answer setting
  if(player){//if(player) start
   call = rand()%101;
   answer = user_a;
  }//if(player) end
  else{//else start
   printf("답 : ");
   scanf("%d",&call);
   answer = com_a;
  }//else end
  if(call == answer){//if(call == answer) start
   printf("Game Over Winner []n");   
   break;// 반복종료
  }//if(call == answer) end
  if(call < answer){//if(call < answer) start
   printf("tUpn");
  }//if(call < answer) end
  else{//else start(2)
   printf("tDownn");
  }//else end(2)
  
 //순서바꾸기
  player^=1;
   
 }//while(1) end

 


}//main end

 

....  왜 답이 41밖에 나오지 않는 겁니까..!

 

그리고 숫자를 적으면 'Up', 'Down' 이 두번씩 뜨네요..

 

시작도 이상하게 되네요;;

 

아무튼 망작..;

 

지금은 다 잊어버려서 함수 이름만 기억하는 이 상황에서..  가르쳐 주실분!

 

    • 글자 크기
... ERROR 나랑 맞짱? (by 10박태수) C언어 스터디 듣는 신입생 필독! (by 10신건)

댓글 달기

댓글 16
  • 컴파일러를 어떤걸로 썻는지 모르겠지만(른척하겠지만)

    rand() 사용법을 검색해보렴(내용도 찬찬이읽어보면좋겠지만)


    두번째 질문은... 귀찬타

    다음 타자에게 패스

  • 코드따위 뜯어볼 여유는 없다!!

    다음 타자에게 패스

    그리고 주석이 탭 공간 없이 바로 붙어있어서 보기 눈아픔...

  • 10신건님께
    12정태식글쓴이
    2012.3.28 00:09 댓글추천 0비추천 0

    으잌..

  • up down 이거 두개 나오는거..

    난 이게 컴퓨터가 정한 숫자 유저가 맞추는 게임인줄알고 쓸데없이 해준게 많다고 생각해고 답변 달았는데

    이게 턴제로 컴퓨터가 입력하고 유저가 입력하는 거 였네. 그래서 답변 수정함ㅋㅋㅋㅋ

    이거 up down 두개 나오는건 컴퓨터답과 유저답임..

    차근 차근 다시 한번 봐봐 위에서부터 아래로

  • 그리고 주석..

    start end 이런건 나중에 줄만 맞춰도 알아보기 쉬운데

    그래도 헷갈리면 지금 while문 같이 안에 소스가 길 때만 start end를 써줘~

    위 소스의 if문 처럼 두세줄 들어가있는 코드까지 start end 이런거 쓰면 나중에 더 보기 어려워질거야

    변수가 어떤 변수인지 주석다는 건 잘했어


    up down 이 왜 두개 나오냐고 묻는걸로 봐서

    너가 만든지 오래되서 어떤 게임인지 어떻게 짰는지 기억이 안나는 거 같은데

    주석은 그럴 때를 대비해서 쓰는거야


    이게 어떤 부분인지 이런걸 주석으로 달아주는게 좋을 거 같아


    주석 고치고 약간 고쳐서 검사받아

    petit405@nate.com 네이트온 친추하렴 태시기

    아님 hyerin08@blending.kr 로 메일 고고고고

  • time.h 헤더를 이용해 srand(time(NULL)) 을 사용해서 해보세요~

     

    나머지는 다음 타자에게 패스

     

    주석이.. 보기 힘들었음..

  • 10박태수님께

    정답이다!!!

  • 다음타자는 자바왕이라서 패스

  • 07서동민님께

    ......

  • 11정동현님께

    위 코드를 자바로 작성하시오dot

  • 혜린이 말이 맞아! 주석을 달아야 나중에 알아보지.


    변수는 달아서 괜찮고(몇개는 안달려서 아쉽), 시작과 끝... 반복문의 시작과 끝은 안달아도 되것 같은데 들여쓰기 하면 돼!


    UP DOWN 두번 나오는건... 그건 턴이다.. 너가 턴식으로 만들어놨던데 하나는 컴터고 하나는 너다 그래서 너가 입력하면 너 턴꺼 결과 나오고 다음 컴터꺼 결과 나와서 연속으로 나오는거야 그래서 친절한 설명이 필요하지!


    image.png 


    개조해봤어, ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ


    소스파일도 첨부함..(현재 상태 표시도 좀 친절하게 해줘야겠다 싶어서 여러가지 메시지 출력이라던가 현재 입력 받은 값이라던가 누구턴이라던가.. 그런거 넣고..ㅋㅋㅋㅋㅋ 불쌍한 컴퓨터를 위해 랜덤 범위 그때그때 줄이도록 해놨어 ㅋㅋ 진짜 저 위에 코드 컴퓨터가 너무 불상해, 그리고 또 하나 턴도 매번 컴퓨터먼저라던가 유저먼저라던가 그러면 불공평하니까 그것도 랜덤)


    주석 진짜 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 일부는 막 달아놨는데 재밌으라고 해놓은거니까 크게 신경쓰지말고 ㅋㅋㅋㅋ 너가 나중에 알아볼 수 있게 달아야되고, 진짜 재대로 달고 싶으면 다른 사람이 이 코드를 처음 봤을 때 주석을 보면 이해할 수 있게 해놓는게 완전 좋아..


    정작 나는 안그러고 있지만, 문서화가 그렇게 중요하다고 하네 ㅋㅋ
  • ㅋㅋ 좀 바보같은게  rand()함수징

    랜덤이라고 해놓고 나올 숫자들이 이미 정해져있거든

    41 51 12 43 ....  <- 대충 이런식으로 정해져있다면

    처음 사용하였을때 41이 나오고 두번째 사용하면 51이 세번째 사용하면 12가 뭐 이런식으로 되는...

    그래서 항상 처음에 사용할땐 같은 값이 나오는거징...

    그래서 해결하는 방법이 계속 변하는 시간을 이용하는 방법..

    태수가 써놓은 방법이 되겠징... 'ㅁ'

     

  • rand함수는 처음 주어진 seed에서 시작해서 항상 같은 공식을 적용하는 알고리즘으로 되어있어서 seed를 바꿔주지 않으면 항상 같은 결과가 나오게되지.

    여기에서 시드는 특정 번호가 나열되어있는 표라고 생각하면 될듯.

  • 아래는 rand 함수와 관련된 팁.


    -------------------------------------------------

    랜덤숫자를 얻어낼 때 쓰는 rand() 함수는 대부분 잘 아실겁니다.

    그런데 이 함수는 주어진 시드에서 시작해 같은 공식을 계속 적용하는 알고리즘을 쓰기 때문에

    사전에 srand()로 시드를 바꿔주지 않으면 항상 같은 패턴을 보이죠.

    srand(time(NULL)); 로 초단위로 시드를 다르게 하던가

    srand(GetTickCount()); 로 아예 밀리세컨드 단위로 맞추던지요.

     

    그런데 프로그래머가 직접 시드를 제어함으로써 상당한 이득을 챙길 수 있는 경우가 있습니다.

     

    예를 들어, 각 레벨마다 rand() 함수에 의존해서 랜덤으로 복잡한 지형을 생성하는 게임을 만들었다고 합시다.

    여기서 세이브 기능을 넣을 때에

    일반적으로는 맵을 통째로 넣을 파일을 생성해서 모든 좌표값의 지형정보를 집어넣습니다.

    여기서 한단계 발전하면 나름대로 압축능력을 구사해서 반복패턴을 읽어내어 집어넣습니다.

    하지만 맵이 크면 클수록 용량이 늘어난다는 고통은 피할 수 없죠.

     

    한단계만 더 생각해 봅시다.

     

    rand() 함수는 시드를 바꾸지 않으면 항상 같은 패턴을 보인다고 했죠?

    예를 들어 srand()를 두번 써서 이런 프로그램을 짠다면?

     

    srand(GetTickCount());

    Seed = rand();

    srand(Seed);

    CreateNewMap();

     

    어떨까요?

    어떻게 생겨먹은 랜덤맵이 나올지는 프로그램 맘이지만,

    바로 그 맵을 만든 랜덤함수의 시드가 Seed 변수에 기억되었습니다.

    이제 이 Seed 변수 하나만 파일에 저장시켜 놓으면, 그 맵을 통째로 저장한 셈이 됩니다.

    왜냐하면 이 Seed를 불러와서 srand(Seed); 를 해준 후 같은 알고리즘으로 맵을 만들어 보면

    천번 했을때 천번 다 똑같은 맵이 나오거든요. ^^

     

     

    단점은,

    1. 플레이가 진행되면서 맵의 내용이 변할 경우 변한 부분은 기억할 수 없다.

    2. 로딩할때마다 맵을 재생성해야 한다.

    3. 프로그래밍 언어에 따라 랜덤함수가 시드에 의한 반복알고리즘을 쓰지 않을 경우에는 적용할 수 없다입니다.

    그런데 장점이 워낙 강력하다 보니 (1억분의 1의 압축률도 가능) 위의 단점을 감안해도 상당히 쓸만한 비법이네요.

     

    ※ 3번은 본인이 직접 랜덤함수를 제작함으로써 해결할 수 있습니다. 무료로 공개된 좋은 알고리즘들이 있으니 얻어오면 됩니다.

  • 어제 제동이오빠가 수업하시다가 좋은 프로그래머 부분에서 얘기해 주셨징?

    주석다는게 진짜 중요해~

    이번같은경우처럼 짜 놓은지 오래된 경우에는 내가 이걸 왜 썼을까 이건 무슨 동작을 하는걸까

    굳이 소스를 일일이 읽어보지 않아도 알기가 쉽거든!

    주석다는 습관이 중요해~

  • 와 소스코드 하나에 이런 토론이! 멋있다

번호 제목 글쓴이 날짜 조회 수
공지 [난해한코딩대회] 예시4 16황지우 2020.08.31 385
공지 회장님 훈화말씀16 16황지우 2020.03.16 8603
공지 스맛폰으로 BLENDING홈피 새글 알림 받기1 BLENDING 2011.06.25 195332
3242 데쟈뷰가 08김현상 2012.04.01 5482
3241 동민이형2 10박태수 2012.04.01 6594
3240 변수 선언 문제에요 array;;1 12정태식 2012.04.01 11412
3239 음?2 12정태식 2012.04.01 10634
3238 변수선언 이름 질문이있어요4 12정태식 2012.04.01 6891
3237 오늘은 정말... 07한형선 2012.04.01 6192
3236 이것이 LOL 이다1 10박태수 2012.03.31 6443
3235 집온김에 책구입5 08김종현 2012.03.31 8086
3234 [긴급공지] 동아리 농구팟 모집1 '09안두헌 2012.03.31 5802
3233 긱사 사는 분들..?2 10박태수 2012.03.30 7207
3232 졸려...4 10박태수 2012.03.29 7286
3231 혜성이형이 왓당.. 훈이형두 왓당..4 10박태수 2012.03.29 7872
3230 이봐 이거 어때?6 07한형선 2012.03.29 7616
3229 ㅎㅎㅎ1 10박유정 2012.03.28 6803
3228 토크콘서트 "청춘, 약해지지마!"2 10신건 2012.03.28 11463
3227 ... ERROR 나랑 맞짱?6 10박태수 2012.03.28 22023
아주 예전에.. 얄팍한 지식으로 업다운게임을 만들었는데요.. 문제가..16 12정태식 2012.03.27 12213
3225 C언어 스터디 듣는 신입생 필독!5 10신건 2012.03.27 8174
3224 망했어요..3 12정태식 2012.03.27 11860
3223 공부두레 C++ 배우미 모집 10신건 2012.03.27 7476
이전 1 ... 23 24 25 26 27 28 29 30 31 32... 190다음
첨부 (0)
위로