본문 바로가기
개발노트/오목게임_C#

C# 오목 게임 개발 #2

by Jaayou 2023. 1. 30.
반응형

오목게임을 개발하기 위한 준비사항을 알아보고 개발할 게임에 대한 기본 구상을 해 보겠습니다. 그리고, 개발에 필요한 C#의 기본 문법과 기능을 간략하게 알아보겠습니다.

 

준비사항

게임을 개발하기 위한 개발환경에 대해 알아봅니다.

 

Visual Studio Community 2022

  • C# 개발을 위한 통합개발환경(IDE)으로 개발, 디버그 및 실행을 모두 할 수 있는 환경입니다.
  • Visual Studio IDE는 코드를 편집하고 디버그를 편리하게 하면 쉬운 빌드를 통해 프로그램을 손쉽게 개발할 수 있는 툴입니다.
  • C#이외에도 다양한 언어를 지원하며 Community 버전은 무료로 사용 가능합니다.
  • https://visualstudio.microsoft.com/ko/free-developer-offers/ 에서 무료로 다운로드하여 설치할 수 있습니다.

 

개발 언어

개발에 필요한 지식을 간략하게 정리해 보겠습니다.

  • C# : C# Form 어플리케이션의 구조, 기본 문법 등

 

오목게임 구상

개발할 오목게임에 대한 기본적인 구조와 구현방안을 정리해 보겠습니다.

 

화면

  • 오목판 : 사각형 그리는 함수를 이용하여 아래와 같은 15*15 사이즈의 오목판을 그립니다. 19*19 사이즈도 선택할 수 기능을 만들어서 사이즈 변경에 따라 프로그램 코드를 어떻게 구현하는지 공부해 보겠습니다.

  • 오목돌 : 원 그리는 함수를 이용하여 아래와 같이 백돌과 흑돌을 그립니다.

오목돌

  • 기능 버튼
    • 시작(재시작) : 시작 버튼을 게임을 시작할 수 있도록 화면 및 내부 게임정보를 초기화합니다.
    • 착수 : 착수는 오목판의 착수위치를 마우스로 클릭하면 흑돌과 백돌이 번갈아가면서 놓입니다.
    • 무르기 : 마지막에 착수한 돌을 취소합니다.

 

기본 기능

  • 사람 vs 사람 대국 : 흑백을 번갈아 가면서 다른 사람과 대국할 수 있도록 합니다.
  • 사람 vs 컴퓨터 대국 : 컴퓨터와 대국할 수 있도록 합니다.

 

기타 구현 기능

  • 오목 여부 체크 : 매 착수 시마다 오목 여부를 체크하여 승부를 판단합니다.
  • 흑 금수 체크 : 흑돌의 경우 33, 44, 장목을 둘 수 없기 때문에 흑에 대해 금수 체크기능을 적용합니다.

 

반응형

C#의 주요 사용 기능

오목게임 개발에 사용할 Javascript의 주요 기능에 대해 알아봅니다.

기본 문법 위주로 제작할 예정이며, Javascript의 기본 문법은 주로 웹사이트 검색을 이용하여 참조할 예정입니다.

Javascript에 대한 개념 및 기본 문법 등은 다른 웹사이트나 유튜브 강의 등을 이용하면 됩니다.

 

리스트

  • 오목의 착수정보를 관리하는 용도로 사용합니다.
  • 리스트는 배열과 달리 동적으로 크기 조절이 되는 구조이기 때문에 항목의 수를 신경쓸 필요가 없습니다.
  • 항목 추가, 삭제, 검색 등 다양한 기능을 제공하기 때문에 유용하게 사용할 수 있습니다.
  • 또한, 단순한 문자나 숫자 이외에도 구조체 객체나 클래스 객체를 요소로 관리할 수 있기 때문에 자료관리에 있어서 매우 편리하고 유용한 기능입니다.
//기본 형태
using System.Collections.Generic;
 
class Program
{
    static void Main()
    {
        List<int> list = new List<int>();
 
        list.Add(2);
        list.Add(3);
        list.Add(5);
        list.Add(7);
    }
}

...

//착수정보List
List<CPoint> mainList = new List<CPoint>();
  • 주요 함수 : 다양한 함수가 있지만 여기에서는 주요한 함수 위주만 정리합니다.
함수명 설명
List.Add 요소를 List의 마지막에 추가하는 함수
List.Clear List의 전체 요소를 제거하는 함수
List.Contains List내에 특정 요소를 포함하고 있는지 검색해서 True/False를 리턴하는 함수
List.Exists List내에 특정 값과 동일한 값이 있는지 검색해서 True/False를 리턴하는 함수
List.Equals 동일한 객체인지를 판단하는 함수
List.Find 특정 조건에 해당하는 요소를 검색할 수 있는 함수
List.FindAll 특정 조건에 해당하는 모든 요소를 검색할 수 있는 함수
List.ForEach 리스트의 전체 요소를 순차적으로 처리할 수 있게 해주는 함수
List.Insert 리스트의 중간에 요소를 추가할 수 있는 함수
List.Remove 조건에 맞는 리스트의 요소를 제거할 수 있는 함수
List.RemoveAll 조건에 맞는 리스트의 모든 요소를 제거할 수 있는 함수
List.Sort 특정 조건에 맞게 정렬할 수 있는 함수
List.ToArray 리스트를 배열로 변환해주는 함수
 

배열

  • 오목판에 해당하는 2차원 배열을 생성하여 흑백의 착수정보를 관리한다.
  • 포인트별 착수 우선순위를 판단하기 위해 포인트별 점수를 관리하는 2차원 배열을 활용한다.
//오목판 배열(15*15 or 19*19)
char[,] mainBoard;

mainBoard = new char[this.boardSize + 1, this.boardSize + 1];

 

클래스/객체

  • 객체지향개념을 적용하여 개발하기 위해 class 구조를 사용합니다.
  • 객체지향언어인 C#의 객체지향구조를 이해하기 위해 기본적인 class 문법으로 구현합니다.
//클래스 선언
internal class COmok
{
	Graphics g;
	int boardSize;
    
	//착수정보List
	List<CPoint> mainList = new List<CPoint>();

	//오목판 배열(15*15 or 19*19)
	char[,] mainBoard;
    
	readonly string[][] omokPattern = new string[2][]
	{
		new string[] { "EBBBBBE", "EBBBBBW", "EBBBBBX", "WBBBBBE", "WBBBBBW", "WBBBBBX", "XBBBBBE", "XBBBBBW", "XBBBBBX" },
		new string[] { "WWWWW" }
	};

	public COmok(Graphics graphics, int boardSize)
	{
		this.g = graphics;
		this.boardSize = boardSize;
		mainBoard = new char[this.boardSize + 1, this.boardSize + 1];
	}    
}

//객체 생성
omok = new COmok(g, 15);

 

반복문

  • 반복적인 처리를 위해 for문, while문 등을 활용하며, 기본적인 for반복문/while문과 forEach구문을 주로 사용합니다.
//while문 기본 구조
while (조건식) {
	// 반복 실행될 코드
}

//do while문 기본 구조
do {
	// 반복 실행될 코드
} while (조건식);

//for문 기본 구조
for(초기식; 조건식; 증감식) {
	// 반복해서 실행될 코드
}

//foreach문 기본 구조
foreach (변수 in 배열 혹은 컬렉션) {
	// 실행될 코드
}

 

3항 연산자

  • 조건문(if)을 간단하게 한 줄로 표현할 수 있는 3항 연산자를 사용합니다.
//기본 구조
object tmp = {조건} ? {참(true)일 경우 return값} : {거짓(false)일 경우 return값}

size = boardSize == 15 ? 15 : 12;

 

반응형

'개발노트 > 오목게임_C#' 카테고리의 다른 글

C# 오목 게임 개발 #6  (0) 2023.01.30
C# 오목 게임 개발 #5  (0) 2023.01.30
C# 오목 게임 개발 #4  (0) 2023.01.30
C# 오목 게임 개발 #3  (0) 2023.01.30
C# 오목 게임 개발 #1  (0) 2023.01.30

댓글