void cpuTurn() { // 타일을 랜덤으로 하나 가져오는 경우 if (d_gamescene.white_tile.Count() == 1 && d_gamescene.black_tile.Count() == 1) { } else if (d_gamescene.black_tile.Count() == 1) { d_gamescene.player_turn = 2; take_tile.w_take(); d_gamescene.player_turn = 1; } else if (d_gamescene.white_tile.Count() == 1) { d_gamescene.player_turn = 2; take_tile.b_take(); d_gamescene.player_turn = 1; } else { int rn = Random.Range(0, 2); d_gamescene.player_turn = 2; if (rn == 0) { take_tile.w_take(); } else { take_tile.b_take(); } d_gamescene.player_turn = 1; } // CPU의 AI를 만들어야 합니다. /* 대안 0 * 그냥 무조건 1개 성공하고 턴넘기는지 안넘기는지만 체크하기 */ /* * while (true) * { * while (true) * { * int oo = Random.Range(0, d_gamescene.p1_count + 1); * * if (d_gamescene.p1_tile_state[oo] % 2 == 1) * { * d_gamescene.p1_tile_state[oo]++; * break; * } * } * d_gamescene.cpucnt = 1; * } * int over = Random.Range(0, 2); * * if (over == 0) * { * d_gamescene.p2_tile_state[d_gamescene.turnidx]++; * if (d_gamescene.turncolor == 3) d_gamescene.p2_bcount--; * else d_gamescene.p2_wcount--; * d_gamescene.cpu_oorc = false; * break; * } * else * { * d_gamescene.cpu_oorc = true; * break; * } * } */ /* 대안 1 * 전체 타일 개수는 28개이며 그 중 자신의 타일 개수+상대의 밝혀진 타일 개수를 제외한 나머지 타일의 숫자를 체크합니다. * 전체 개수 - 자신의 타일 개수+상대의 밝혀진 타일 개수를 A라 칭하면, * 랜덤으로 1~28까지의 숫자를 내보낸 후, 그 숫자가 A보다 클 경우에는 CPU가 타일을 맞춘 것으로 체크하여 진행합니다. */ /* * while (true) * { * int ox = Random.Range(1, 29); * int A = 28 - d_gamescene.p2_count - (d_gamescene.p1_count - d_gamescene.p1_wcount - d_gamescene.p1_bcount); * * if (ox > A) * { * while (true) * { * int oo = Random.Range(0, d_gamescene.p1_count + 1); * * if (d_gamescene.p1_tile_state[oo] % 2 == 1) * { * d_gamescene.p1_tile_state[oo]++; * break; * } * } * d_gamescene.cpucnt++; * } * else * { * d_gamescene.p2_tile_state[d_gamescene.turnidx]++; * if (d_gamescene.turncolor == 3) d_gamescene.p2_bcount--; * else d_gamescene.p2_wcount--; * d_gamescene.cpu_oorc = false; * break; * } * * if (ox % 2 == 0) * { * d_gamescene.cpu_oorc = true; * break; * } * } */ /* 대안 2 * 대안 1과 동일하나, 대안 1에서 CPU가 이길 확률이 꽤 낮다는 생각이 들어 CPU가 못 맞추고 턴을 종료한 턴의 횟수를 세어 그마다 CPU가 맞출 확률을 높여주었습니다. */ int count_check = 0; while (true) { int ox = Random.Range(1, 29); int A = 28 - d_gamescene.p2_count - (d_gamescene.p1_count - d_gamescene.p1_wcount - d_gamescene.p1_bcount) - (d_gamescene.cpu_notO * 2); if (ox > A) { while (true) { int oo = Random.Range(0, d_gamescene.p1_count + 1); if (d_gamescene.p1_tile_state[oo] % 2 == 1) { d_gamescene.p1_tile_state[oo]++; break; } } count_check++; d_gamescene.cpucnt++; } else { d_gamescene.p2_tile_state[d_gamescene.turnidx]++; if (d_gamescene.turncolor == 3) { d_gamescene.p2_bcount--; } else { d_gamescene.p2_wcount--; } d_gamescene.cpu_oorc = false; if (count_check == 0) { d_gamescene.cpu_notO++; // cpu가 1개의 타일도 맞추지 못하고 턴이 넘어갈 경우, cpu가 맞출 확률을 조금 높여줌 } break; } if (ox % 2 == 0) { d_gamescene.cpu_oorc = true; break; } } /* 추가 보정안 * 앞 타일들부터 체크해 밝혀진 타일의 숫자를 저장해둔 뒤, * 다음 밝혀진 타일까지의 사이의 타일 개수와 다음 밝혀진 타일의 숫자를 비교해 사이 숫자가 타이트하게 맞으면 (색상까지) * 그 사이의 타일들은 전부다 맞출 수 있게 합니다. */ // 아직 미구현 }
// Update is called once per frame void Update() { // 1플레이어의 턴일 때, 해당 플레이어가 가진 색상별 타일의 개수를 보여줌 if (d_gamescene.player_turn == 1) { White_num.GetComponent <Text>().text = "x " + d_gamescene.p1_wcount; Black_num.GetComponent <Text>().text = "x " + d_gamescene.p1_bcount; } // 2플레이어의 턴일 때, 해당 플레이어가 가진 색상별 타일의 개수를 보여줌 else { White_num.GetComponent <Text>().text = "x " + d_gamescene.p2_wcount; Black_num.GetComponent <Text>().text = "x " + d_gamescene.p2_bcount; } // 게임 시작 전 각 플레이어가 타일 4장을 뽑는 단계 if (d_gamescene.game_state == 0) { // 시작 전 1Player 차례 if (d_gamescene.player_turn == 1) { take_tile_txt.GetComponent <Text>().text = "Player 1의 차례 입니다\n 숫자 타일을 4장 골라주세요"; if (d_gamescene.p1_count == 4) { d_gamescene.player_turn = 2; } } // 2P 모드 시작 전 2Player 차례 else if (d_gamescene.game_mode == 2) { take_tile_txt.GetComponent <Text>().text = "Player 2의 차례 입니다\n 숫자 타일을 4장 골라주세요"; if (d_gamescene.p2_count == 4) { d_gamescene.game_state = 1; d_gamescene.player_turn = 1; } } // 1P 모드 시작 전 CPU 자동 진행 else { // 카드 4장 랜덤 입력 d_gamescene.player_turn = 2; for (int i = 0; i < 4; i++) { int ran_num = Random.Range(0, 2); if (ran_num == 0) { take_tile.w_take(); } else { take_tile.b_take(); } } d_gamescene.player_turn = 1; d_gamescene.game_state = 1; } } // 게임 시작 후 플레이어가 턴을 시작하고 나서 처음 타일 1장을 뽑는 단계 else if (d_gamescene.game_state == 1) { // 시작 후 1Player 차례 if (d_gamescene.player_turn == 1) { take_tile_txt.GetComponent <Text>().text = "Player 1의 차례 입니다\n 숫자 타일을 1장 골라주세요"; } // 2P 모드 시작 후 2Player 차례 else if (d_gamescene.game_mode == 2) { take_tile_txt.GetComponent <Text>().text = "Player 2의 차례 입니다\n 숫자 타일을 1장 골라주세요"; } } }