
최종코드---
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace pachinkogame { class pachinko { ///////////////////////////// static int money = 100; //first money static int score = 0; static char a, b, c; static Random r = new Random(); /////////////////////////////// static char createcharacter() { System.Threading.Thread.Sleep(50); int random = r.Next(0, 6); char character; switch (random) // 0 ~ 4 (A, #, V, $, %) { case 0: character = 'A'; break; case 1: character = '#'; break; case 2: character = 'V'; break; case 3: character = '$'; break; default: character = '%'; break; } return character; } static void printresult() { Console.SetCursorPosition(10, 6); Console.WriteLine("STOP!"); if (a == b && b == c) { score = 30; Console.SetCursorPosition(10, 8); Console.WriteLine("WIN! +30"); } else { score = -5; Console.SetCursorPosition(10, 8); Console.WriteLine("LOSE -5"); } money = money + score; System.Threading.Thread.Sleep(1000); } static void play() { while (money > 0) { if (Console.KeyAvailable == true) { printresult(); Console.ReadKey(true); //erase key insert } else if (Console.KeyAvailable == false) { while (Console.KeyAvailable == false) { Console.SetCursorPosition(10, 6); Console.WriteLine("--------- NOW MONEY : {0} ", money); Console.SetCursorPosition(10, 8); Console.WriteLine("---------"); Console.SetCursorPosition(10, 7); Console.Write("- "); a = createcharacter(); b = createcharacter(); c = createcharacter(); Console.Write("{0} {1} {2}", a, b, c); Console.WriteLine("-"); } } } } static void Main(string[] args) { play(); // if money is 0, game is end. Console.SetCursorPosition(10, 10); Console.WriteLine("Thank you for playing!"); System.Threading.Thread.Sleep(1500); } } } | cs |
-------------------------------------
1. 하노이의 탑을 만들라고 했었는데, 결국 뭘 만들라는건지 질문 자체를 이해못해서 파칭코 게임으로 만들게 됐다.
2. 이번엔 사람의 도움이 아니라, 필요한 코드들은 직접 짜고
막히는 부분은 인터넷에서 찾고 찾아서 얼기설기 코드를 만들었더니
왜 여기서 이렇게 하면 버그가 나는걸까 싶은 부분도 아직 그대로 있다ㅜㅜ
해결은 해서(자리를 바꾼다거나 해서) 버그는 없이 돌아가지만 그냥 왜 거기서 버그가 났었는지 아직도 모름.....
3. 파칭코가 빙글빙글 돌아가는걸 보여주고 싶었음.
while문 하나를 키 입력 받기 전까지 무한으로 돌게 하려고
( while (Console.KeyAvailable == false) ) 이런것도 써봄 ㅋㅋ
근데 한번 입력하니까 계속 입력된걸로 인식해서 진행이 안됨 ㅠㅠㅋ 찾다보니
(Console.ReadKey(true);) 요렇게 해주면 왠지 입력이 리셋될것 같아서 해보니 진짜 리셋됨!! 올레!
(그럼 false 하면 어떻게 될까......?!)
4. if문 안의 무한 루프를 돌던 while에서, 입력을 받은 후 빠져나와, 다음 else if로 갈 줄 알았던 분기문이,
if가 끝났다고 if else로 안가고 바로 다음 구문으로 넘어가 버려서 멘붕.
(사실 방금까지 왜 그런건지 모르고 있었는데 블로그에 정리하면서 깨달았다....
if를 두개쓰면 되는 문제였는데..... 이걸 왜 몰랐었니 ㅇ<-< 으아)
5. 랜덤함수는 아무래도 시간의 영향을 받는거 같은데, 한 랜덤함수에서 한번에 3개의 글자를 "짠!" 하고 구해버리면
항상 같은 글자가 나온다는 문제점이 있어서(...) 글자 사이에 시간차를 준 후 랜덤 함수를 두개 구해서 곱해버림.
(글쓰다보니 두개 구할 필요가 없네? 내일 코드 고쳐야지.)
(글쓰다보니 나머지를 따로 구할 필요도 없잖아? 나 뭐니)
6. 4번의 이유 때문에 코드 사이에 약간의 텀을 주는 함수가 없을까 찾다가
유용한 녀석(System.Threading.Thread.Sleep(MiliSec.)) 발견.
7. 한번 그려진 그래픽(이라기엔 좀 민망하지만ㅋ) 위에 새로운 그래픽을 그리기 위해
커서 위치를 조정하는 함수도 써봄(Console.SetCursorPosition(x,y);). 우오오
잼남 신남! 뭔가 실시간?으로 돌아가는 게임을 만든 느낌!!ㅋㅋ
8. 점수랑, 점수에 계산해줄 그 턴의 점수는 아예 전역변수로 선언해버림.
원랜 play 함수 안에 넣었는데, play 함수가 재귀로 한바퀴 돌때마다 리셋 되어버리길래
(리셋은 내가 할꺼야!! 누구맘대로!!) 걍 맨 첨으로 꺼내버렸다.... 이래도 되는걸까?ㄷㄷ
9. 정말 한글로 된 블로그들보단 영문 블로그가 훠어얼씬 방대하고 자료가 많다.
위의 함수들은 그나마 대중적이지만, 조금만 생소한 함수들로만 들어가도 (특히)네이버에선 전혀 찾을수가 없다.
그러니까 구글링합시다 여러분.
10. I wanna make different function 이라고 적어놓은 부분은
원래대로라면 따로 함수로 때고 싶었는데, 저 a, b, c 요녀석들이 문제여서 따로 떼질 못했다.
밤이 늦어서 머리가 제대로 안돌아간건지... 내일 다시 보고 따로 떼야지.
그래야 부가적인 다른 기능들도 넣을 수 있을듯.
흐으.. 벌써 자정이 넘었다 ㅠ
나중에 좀 더 물어보고 아쉬운 부분 몇 군데 더 고칠생각.
잘자용.
-----다음날 추가수정----
1. 랜덤 수를 매번 구해 줄 필요가 없어서, 전역변수로 뺌.
2. a, b, c도 비교하기위해 밖으로 뺌.
근데 생각해보니 비교할때 char형을 int형으로 비교했는데도 비교가 되더라 ㄷㄷ지적받고 놀람.
3. 이전 코드에서 print()던 함수를 createcharacter()로 (지적받고)바꿨다.
일단 이름만으로 뭘 하는지 알아야 하는데, 그게 불가능했고, 이 함수가 하는 일과 정확히 매치되지도 않았고
그래서 함수 안에 프린트 하는 부분을 아예 함수밖으로 빼고, 캐릭터 생성하는 함수로 정리함.
4. 재귀로 돌던 함수는 몇만번을 돌게되면 뻑(크래쉬)이 날 수 있다는 이야길 듣고
while문으로 바꿨다. 동시에 돈이 0원이 되면 함수에서 나와서 게임이 종료되도록 바꿨다.
5. 그 외에 자잘하게, 이기면 WIN, 지면 LOSE 라고 출력하는걸 만들었다.
'Programing(프로그래밍)' 카테고리의 다른 글
C# 어딘가에 있을 대문자를 찾자 (0) | 2015.08.05 |
---|---|
C# 직원관리시스템 (파일 입출력, List<T>와 정렬, 클래스란 무엇인가) (0) | 2015.08.05 |
c# 도형그리기와 팩토리 패턴(객체지향OOP, 클래스cs 관리, 프로퍼티 등) (0) | 2015.08.05 |
C# 입력받은 스트링을 뒤집어보자 (0) | 2015.08.05 |
C# 퀵 소트 (0) | 2015.08.05 |