비주얼 프로그래밍 1분반 화/수.

Slides:



Advertisements
Similar presentations
파이썬 (Python). 1 일 : 파이썬 프로그래밍 기초 2 일 : 객체, 문자열 3 일 : 문자인코딩, 정규표현식, 옛한글 4 일 : 파일 입출력 5 일 : 함수와 모듈 6 일 : 원시 말뭉치 다루기 실습 7 일 : 주석 말뭉치 다루기 실습 8 일 : 웹 데이터로.
Advertisements

변수와 조건문 빛나리 36 호 박승운. 파이썬 쉽게 사용하기 Python IDLE 사용 FILE - New File 로 파일 만들기 Run – Run Module 로 실행하기.
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
Term project. Touch-screen 활용 그림판 –Touch-screen 을 입력장치로 하여 LCD 상에 그림을 그리는 프로그램 – 터치 입력을 절대 좌표로 받는 디바이스 /dev/touch 를 만들어 응용 프 로그램에서 수행하도록 함. –User interface.
어서와 Java는 처음이지! 제20장 실전프로젝트 #2.
DB 프로그래밍 학기.
DB 프로그래밍 학기.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
윤 홍 란 다이알로그(대화상자) 윤 홍 란
Chapter 7. 조건문.
제 9 장 구조체와 공용체.
Report #2 - Solution 문제 #1: 다음과 같이 프로그램을 작성하라.
제 4 장 클래스 작성 Lab 4- 2.
비주얼 프로그래밍(2분반) 강의노트 2분반 = 월/목.
Lesson 3. 입출력과 제어문.
7장 배열 ②.
설계및프로젝트기본I 2017년 1학기(02분반).
어서와 Java는 처음이지! 제3장선택과 반복.
설계및프로젝트기본I 2017년 1학기(02분반).
Visual Basic 함수.
마우스(Mouse) 다루기 컴퓨터응용 및 실습 I.
Communication and Information Systems Lab. 황재철
1. C++ 시작하기.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
Visual Basic 조건문.
비주얼 프로그래밍 1분반 화/수.
컴퓨터 프로그래밍 실습 #6 제 4 장 클래스 작성.
C#.
13. 연산자 오버로딩.
3. while문 반복문의 종류 while 문 while( 조건식 )        문장;.
JAVA Canvas Swing.
JA A V W. 03.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
C 언어 교육 02 주차 – scanf & 반복문과 조건문 교육부장 조하정.
어서와 C언어는 처음이지 제14장.
어서와 C언어는 처음이지 제15장.
인터넷응용프로그래밍 JavaScript(Intro).
비주얼 프로그래밍(2분반) 강의노트 2분반 = 월/목.
비주얼 프로그래밍 1분반 화/목.
Lesson 4. 수식과 연산자.
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
에어 조건문.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
8장. spss statistics 20의 데이터 변환
컴퓨터 프로그래밍 기초 - 5th : 조건문(if, else if, else, switch-case) -
비주얼 프로그래밍 1분반 화/목.
김선균 컴퓨터 프로그래밍 기초 - 7th : 함수 - 김선균
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
5장 선택제어문 if 선택문 switch-case 선택문 다양한 프로그램 작성 조건 연산자.
17장. 제어문과 내장 함수 제어문 내장 함수 제어문 내장 함수.
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
비주얼 프로그래밍(2분반) 강의노트 2분반 = 월/목.
빌드 성공.
강의 소개 컴퓨터시뮬레이션학과 2017년 봄학기 담당교수 : 이형원 E304호,
함수(Function) ◈ 함수의 개념 및 사용 이유 ◈ 함수 정의, 호출 및 선언 ◈ 지역변수와 전역변수 ◈ return 문
2nd day Indexing and Slicing
디버깅 관련 옵션 실습해보기 발표 : 2008년 5월 19일 2분반 정 훈 승
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
Flow Diagram IV While.
C++ 프로그래밍 기초 √ 원리를 알면 IT가 맛있다 3장. 연산자.
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
어서와 C언어는 처음이지 제21장.
그래픽 컨트롤 (Graphic Control)
6 객체.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

비주얼 프로그래밍 1분반 화/수

1주차 1시간 2.28(화)

오늘 공부할 내용 수업계획서 비주얼 프로그래밍 C / C++ / C# Form 프로그래밍 이벤트 C/C++ : 객체지향언어( class) 가 다르다 C/C++ : 같은 언어, 포인터로 메모리 관리 C++ / C# : 객체지향(class) / C# 포인터없다 .NET이 해준다 Form 프로그래밍 Login

F5 – 디버깅 ^-F5 – 디버깅 없이 시작 class Program { static void Main() } C# 의 가장 핵심적인 필수 코드

한 솔루션에 두 개 이상의 프로젝트 만들고 시작 프로젝트로 설정한다

폼/WPF 프로그램 디자인 -> 속성 변경/ 이벤트 지정 -> 코딩 디자인 디자인 -> 속성 변경/ 이벤트 지정 -> 코딩 디자인 Form -> Control(콘트롤)들을 배치시킴 속성 : Text, 색깔, 크기, 위치, … 해당 콘트롤에 이벤트 지정 코딩 이벤트 처리 함수 F7

이벤트 지정 -> 이벤트함수 작성

이벤트 처리 함수 // button1이 클릭될 때 발생하는 이벤트처리함수 private void button1_Click(object sender, EventArgs e) { if (textBox1.Text == "의료IT" && textBox2.Text == "1234") label3.Text = "성공했습니다"; } else label3.Text = "실패했습니다";

다음 수업 종료버튼 완성 WPF로 로그인하는 프로그램 작성

1주차 2시간 3.1(수) – 삼일절 휴강

3.7(화) Form : Login – Close() WPF : HelloWorld / BMI계산기 2주차 1일 3.7(화) Form : Login – Close() WPF : HelloWorld / BMI계산기

1. HelloWorld Windows Form WPF Label의 폰트를 바꿀 수 있다 Form의 배경색을 바꿀 수 있다 이벤트 함수를 만들 수 있다 수업자료 : http://m.post.naver.com/kquddlr WPF Label과 TextBlock XAML을 쓸 수 있다 (자멜) 폰트를 바꿀 수 있다 MainWindow 의 배경색을 바꿀 수 있다 WPF의 window default?

배경색과 글자색을 Toggle private void label1_Click(object sender, EventArgs e) { if (label1.ForeColor != Color.White) label1.ForeColor = Color.White; this.BackColor = Color.Black; } else label1.ForeColor = Label.DefaultForeColor; this.BackColor = Form.DefaultBackColor;

2. WPF HelloWorld <Grid> <Label Name="label1" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="30" FontWeight="Bold" MouseDown="Label_MouseDown">Hello World!</Label> </Grid> // Form 에서는 클릭이었지만, WPF에서는 MouseDown private void Label_MouseDown(object sender, MouseButtonEventArgs e) { if(label1.Foreground != Brushes.White) label1.Foreground = Brushes.White; this.Background = Brushes.Blue; } else label1.Foreground = SystemColors.WindowTextBrush; this.Background = SystemColors.WindowBrush;

3.8(수) Form/WPF : BMI계산기 C# 기본 2주차 2일 3.8(수) Form/WPF : BMI계산기 C# 기본

2. BMI 계산기 Form 프로그램으로 BMI 계산기를 만들 수 있다. WPF 프로그램으로 BMI 계산기를 만들 수 있다. 숫자 <--> stirng 상호변환을 할 수 있다. WPF 프로그램으로 BMI 계산기를 만들 수 있다. <StackPanel>을 사용하여 디자인을 할 수 있다. BMI 지수 = 몸무게(kg) ÷ (신장(m) × 신장(m))

WPF 디자인 방법 신장(m) 체중(kg) BMI계산 당신의 BMI는 **.**** 입니다. Label / TextBlock  글을 나타내기 위함(출력) TextBox  글을 입력받기 위함(입력/출력)

VS 코멘트 ^K-C 언코멘트 ^K-U

C# 기초 상수(Constant) 변수(Variabel -> Identifier) C 패밀리는 다 같다 기본 데이터 형(Type) 정수 : int(4바이트 32비트) , long(8바이트 64비트) 실수 : double(8바이트 64비트), float(4바이트 32비트) 문자 : char (1바이트 8비트) 문자열 : string Bool : bool

WPF Grid StackPanel Label TextBlock 위에서부터 컨트롤들을 쌓아나간다 StackPanel 안에 StackPanel이 또 있을 수 있다 Orientation=“Horizontal”

과제 및 시험안내 BMI 계산기 Form, WPF – 블로그에 올릴 것 다음 주 화요일 수시 1차 시험 – 코딩 (30분)

3주차 1일 3.14(화) 수시1차 계산기

계산기 TextBox Button Title

3장 조건문 if 조건문의 기본적인 사용 방법을 익힌다. if 조건문과 논리 연산자를 함께 사용하는 방법을 익힌다. switch 조건문을 이해한다

if 문 기본예제 3-1 홀수 짝수 구분(1)(교재 117p)

DateTime 구조체(struct) p.119 DateTime.Now DateTime.Now.Year DateTime.Now.Hour 기본예제 3-2 오전과 오후 구분(1)(교재 119p)  3/13 오늘 여기까지 (문제) 입력한 숫자에 소수점이 있는지 체크하는 프로그램 string.Contains() 메서드 사용 (교재 p.133)

if else 기본예제 3-3 홀수 짝수 구분(2)(교재 117p)

중첩조건문 조건문 안에 조건문 DateTime.Now.Hour을 사용하여 아침, 점심, 저녁 먹을 시간을 체크하는 프로그램을 작성하라 (11시 이전 -> 아침, 그렇지 않고 15시 이전 -> 점심, 아니면 저녁)

if ~ else if ~else (문제)점수를 입력하면 학점을 계산해 주는 프로그램

switch 문 switch(비교값) { case 값1: 문장 break; case 값2: 문장 break; … default: 문장 break; } (문제) 입력한 숫자가 홀수인지 짝수인지 판단하는 프로그램을 switch 문으로 작성하라 (문제) (break없는 case문) 3,4,5월 -> 봄 6,7,8월 -> 여름 9,10,11월 -> 가을 12,1,2월 -> 겨울

4주차 1일 3.21(화) 조건문

오늘 연습문제들 // 1. 정수하나를 입력받아 홀수, 짝수를 출력하는 문제 int x = int.Parse(Console.ReadLine()); if(x % 2 == 1) Console.WriteLine("홀수입니다"); else Console.WriteLine("짝수입니다"); // 2. 현재시간을 보고 오전인지 오후인지 출력하는 문제 Console.WriteLine(DateTime.Now); //DateTime.Now.Hour가 12이상이면 오후, 아니면 오전 if (DateTime.Now.Hour >= 12) { Console.WriteLine("오후"); } Console.WriteLine("오전");

// 3. p124 // 11시 이전이면 아침, 11시부터 15시 이전이면 점심 // 아니면 저녁이라고 출력하라 // if(조건) else if(조건) .... else if(DateTime.Now.Hour < 11) Console.WriteLine("아침시간"); else if(DateTime.Now.Hour < 15) Console.WriteLine("점심시간"); else Console.WriteLine("저녁시간");

// 4. 1~100점 점수를 입력하면 A,B,C,D,F 학점을 출력 Console // 4. 1~100점 점수를 입력하면 A,B,C,D,F 학점을 출력 Console.Write("점수를 입력하세요: "); int score = int.Parse(Console.ReadLine()); if(score >= 90) Console.WriteLine("A"); else if(score >= 80) Console.WriteLine("B"); else if(score >= 70) Console.WriteLine("C"); else if(score >= 60) Console.WriteLine("D"); else Console.WriteLine("F");

// 5. switch문 : 홀수 짝수 // switch(정수, 문자, 문자열)만 가능 // 반드시 break; 있어야 한다 Console.Write("숫자 하나 입력 : "); int number = int.Parse(Console.ReadLine()); switch(number % 2) { case 1: Console.WriteLine("홀수"); break; case 0: Console.WriteLine("짝수"); }

// 6. 12,1,2월은 겨울, 3,4,5월은 봄, // 6,7,8월은 여름, 9,10,11월은 가을 // DataTime // 6. 12,1,2월은 겨울, 3,4,5월은 봄, // 6,7,8월은 여름, 9,10,11월은 가을 // DataTime.Now.Month int m = DateTime.Now.Month; if (m == 12 || m == 1 || m == 2) Console.WriteLine("겨울"); else if(m >= 3 && m <= 5 ) Console.WriteLine("봄"); else if(m >= 6 && m <=8) Console.WriteLine("여름"); else Console.WriteLine("가을");

// 7번 계절 스위치 switch (DateTime. Now // 7번 계절 스위치 switch (DateTime.Now.Month) { case 1: case 2: case 12: Console.WriteLine("겨울"); break; case 3: case 4: case 5: Console.WriteLine("봄"); case 6: case 7: case 8: Console.WriteLine("여름"); default: Console.WriteLine("가을"); }

// 8.학점 스위치 // 정수 / 정수 => 정수 // 99/10 => 9 // 98/10 => 9 score = int.Parse(Console.ReadLine()); switch(score/10) { case 10: case 9: Console.WriteLine("A"); break; case 8: Console.WriteLine("B"); case 7: Console.WriteLine("C"); case 6: Console.WriteLine("D"); default: Console.WriteLine("F"); } A+/A0는 어떻게 처리하나?

4주차 2일 3.22(수) 반복문

삼항연산자 [조건식] ? [참] : [거짓] (문제) 삼항연산자를 사용하여 홀수, 짝수를 판단하는 프로그램을 작성하라 (문제) 입력받은 정수값이 자연수인지 아닌지를 삼항연산자를 사용하여 작성하라

삼항연산자 연습 // 0. 출력 포맷 double x = 52.1234578; Console.WriteLine(x); Console.WriteLine(x.ToString()); Console.WriteLine(x.ToString("0.0000")); // 1. 짝수 홀수 int ii = 5; Console.WriteLine(ii%2 == 0 ? "짝수": "홀수"); if(ii%2 == 0) Console.WriteLine("짝수"); else Console.WriteLine("홀수"); // 2. 자연수입니다. 아닙니다 Console.Write("숫자입력: "); int nVal = int.Parse(Console.ReadLine()); Console.WriteLine(nVal>0 ? "자연수입니다" : "자연수가 아닙니다");

반복문 연습 // 반복문 너무너무너무너무너무너무 중요함!!!!!!!! // C, C++, C# : for, while, do // C# : foreach // for(시작; 끝나는 조건; 변화) // { // 문장하나; // 문장둘; // } Console.WriteLine("191115 강병익"); // 몇번 반복 -> for(i=0; i<몇번; i++) for(int i=0; i<10; i++) Console.WriteLine( (i+1) +"\t" + "191115 강병익");

// 1,3,5,7,9 출력 // 1에서 부터 9까지 2씩 증가하며 출력 for(int i=1; i<=9; i=i+2) // i+=2 Console.WriteLine(i); // 2,4,6,8,10,... 20 까지 출력 // 156에서부터 17개의 숫자를 출력 for(int i=0; i<17; i++) Console.WriteLine(156+i); // 1,2,4,8,16,32,...1024 출력 for(int i=1; i<=1024; i*=2)

// 15부터 50까지 5씩 증가하면서 출력 // WriteLine()의 매개변수 연습 // 1에서 10까지 i, i*i, i*i*i 출력 for(int i=1; i<=10; i++) Console.WriteLine("{0}\t{1}\t{2}", i, i*i, i*i*i); // 100에서 1000까지 7의 배수를 출력 for(int i=100; i<=1000; i++) if(i%7 == 0) Console.Write(i + "\t"); Console.WriteLine();

// 숫자 3개(n1,n2,n3)를 입력받아, // n1~n2사이의 n3의 배수를 출력 int n1 = int // 숫자 3개(n1,n2,n3)를 입력받아, // n1~n2사이의 n3의 배수를 출력 int n1 = int.Parse(Console.ReadLine()); int n2 = int.Parse(Console.ReadLine()); int n3 = int.Parse(Console.ReadLine()); for(int i=n1; i<=n2; i++) if(i%n3 == 0) Console.Write(i+"\t"); Console.WriteLine(); // sum 하기 // 1에서 100까지 합 // 1에서 100까지 하나씩 증가하면서 값을 더해나간다 int sum = 0; for (int i = 1; i <= 100; i++) sum += i; Console.WriteLine(sum);

// 숫자 3개(n1,n2,n3)를 입력받아, // n1~n2사이의 n3의 배수의 합을 출력 n1 = int // 숫자 3개(n1,n2,n3)를 입력받아, // n1~n2사이의 n3의 배수의 합을 출력 n1 = int.Parse(Console.ReadLine()); n2 = int.Parse(Console.ReadLine()); n3 = int.Parse(Console.ReadLine()); sum = 0; for (int i = n1; i <= n2; i++) if (i % n3 == 0) sum += i; Console.WriteLine(sum); // factorial 계산 // n! = 1*2*...*n Console.Write("n! 계산: n을 입력 : "); int n = int.Parse(Console.ReadLine()); int fact = 1; for (int i = 1; i <= n; i++) { fact *= i; Console.WriteLine("{0}! = {1}", i, fact); } //Console.WriteLine(fact);

Console.ReadKey() ConsoleKeyInfo info = Console.ReadKey(); switch(info.Key) { case ConsoleKey.UpArrow: Console.WriteLine("위"); break; case ConsoleKey.DownArrow: Console.WriteLine("아래"); case ConsoleKey.LeftArrow: Console.WriteLine("왼쪽"); case ConsoleKey.RightArrow: Console.WriteLine("오른쪽"); default: Console.WriteLine("다른 키"); }

5주차 1일 – 참고자료(GDI+) 3.28(화) 수시 2차 GDI+

오목 WinForm GDI+ 메뉴 : MenuStrip 19개의 가로 세로 줄 화점 9개 흰돌, 검은돌, 바둑판 Graphics class g.DrawLine(), g.FillEllipse() Pen class, Brush class Rectangle(), Point(), Size() 구조체 OnPaint() 메뉴 : MenuStrip 19개의 가로 세로 줄 화점 9개 흰돌, 검은돌, 바둑판 enum STONE {none, black, white}; STONE[,] 바둑판 = new STONE[19,19]; 메뉴를 사용하므로, 좌표계산을 쉽게 하기 위해 Panel을 부모에 도킹 화점위치 : 3, 9, 16

바둑판 좌표 X좌표 Y좌표 (m, m) (m+18*눈, m) Margin=m 이라고 했을 때 … …

바둑판 그리기 // 폼의 크기 조정 ClientSize = new Size(20+18*눈size, 20+18*눈size + menuStrip1.Height); g = panel1.CreateGraphics(); // 가로줄 for(int i=0; i<19; i++) { g.DrawLine(pen, new Point(margin, margin + 눈Size * i), new Point(margin + 18 * 눈Size, margin + 눈Size * i)); } // 세로줄 new Point(margin + 눈Size * i, margin), new Point(margin + 눈Size * i, margin + 눈Size * 18));

5주차 2일 – 참고자료(GDI+) 3.29(수) 오목 프로그램 계속

화점 그리기 화점 그리기 (3, 9, 15) 위치에 점을 그린다 g.DrawEllipse(pen, new Rectangle()) g.FillEllipse(bBrush, new Rectangle()) for(int i=3; i<=15; i+=6) for(int j=3; j<=15; j+=6) g.FillEllipse(bBrush, new Rectangle(margin + i * 눈Size - 화점Size/2, margin + j * 눈Size - 화점Size/2, 화점Size, 화점Size));

화점 (m,m) (m+눈,m) (m+눈*2,m) (m+눈*3,m) m+눈 m+눈*2 (m+눈*3, m+눈*3)

화점의 위치 이동(돌도 같은 방법) Rectangle(x,y,화점Size, 화점Size) (x,y) 화점Size 화점Size Rectangle(x-화점Size/2, y-화점Size/2,화점Size, 화점Size)

오늘까지 한 프로그램 다음에 해야 할 기능 목요일 GDI+ 시험 오목을 체크하는 코드 추가! 게임 저장 게임 불러오기 하나씩 복기 기능 이미지 사용법 NoResize 목요일 GDI+ 시험 어떤 그림을 그리라는 시험 다음 주로 연기

속성창 선택된 컨트롤의 이름 선택된 컨트롤의 클래스

6주차 1일 – 참고자료(GDI+) 4.3(월)  내일 수업 선보강 오목 프로그램 계속

바둑판과 그에 대응하는 자료구조 STONE 바둑판[19,19] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 바둑판과 그에 대응하는 자료구조 STONE 바둑판[19,19] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 w b

오목 남은 문제 No Resize 그림 지워지지 않는 방법 이미지 사용법 오목이 되었는지 체크하는 방법 바둑돌 다시 그리기 다시 시작 메뉴 : 다시 시작 복기: 오목 진행 상황 저장 메뉴 보기 : 이미지 또는 그리기 게임 저장 게임 불러오기 하나씩 복기 기능

1. No Resize 바둑판은 정해져 있으므로 크기가 바뀔 필요가 없다  크기를 고정시키려면?

해법 FormBorderStyle을 FixedSingle로 하면 크기를 수정할 수 없다

2. 그림 지워지는 문제 Paint 이벤트에 의해서 OnPaint() 함수 호출하여 다시 그려줌 그런데 폼을 화면 바깥으로 가져갔다가 오면 다시 그려지지 않음 이 이벤트는 Form1_Move() 함수로 처리할 수 있음 다시 그려지지 않는 문제점 해결해야 함!!

3. Image 사용법 흑돌과 백돌을 FillEllipse()로 그리는 방법 대신, 이미지를 사용하는 방법 솔루션 탐색기에서 프로젝트 밑에 이미지를 저장할 폴더를 만들고 이곳에 이미지 파일을 저장함           if (turn == false)    // 검은 돌             {                 // g.FillEllipse(bBrush, r);                 Bitmap bmp = new Bitmap("../../images/black.png");                   g.DrawImage(bmp, r);                 바둑판[x, y] = STONE.black;             }             else             {                 //g.FillEllipse(wBrush, r);                 Bitmap bmp = new Bitmap("../../images/white.png");                 g.DrawImage(bmp, r);                 바둑판[x, y] = STONE.white;             }

DrawImage() vs FillEllipse()

이것을 menu에 추가 여기에서도 flag를 하나 사용하자 imageFlag = true; // DrawImage() imageFlag = false; // DrawEllipase()

4. checkOmok() 돌을 하나 놓았을 때, 이 돌에 의해 오목이 만들어졌는지를 체크하는 함수 돌이 하나 놓이면, 다음 네 방향으로 같은 색깔의 돌이 5개 인지 체크함 좌우 상하 우상향 대각선 우하향 대각선

checkOmok() – 좌우방향만 체크 // 지금 놓인 돌에 의해 //오목이 만들어졌는지를 체크하는 함수 private void checkOmok(int x, int y) { int cnt = 1; // [x,y]의 오른쪽으로 체크 for (int i=1; i<5; i++) if (x + i <= 18 && 바둑판[x + i, y] == 바둑판[x, y]) cnt++; else break; } // [x,y]의 왼쪽으로 체크 for(int i=1; i<5; i++) if (x - i >= 0 && 바둑판[x - i, y] == 바둑판[x, y]) if (cnt >= 5) MessageBox.Show(바둑판[x, y] + " Wins!");

5. 바둑돌 새로 그리기 한번 최소화 후 다시 바둑판을 띄우면 OnPaint()에 의해 바둑판은 다시 그려지지만, 바둑돌은 다시 그릴 수 없다  자료구조에서 바둑돌을 다시 그려주자(OnPaint()에 추가) ?

수정한 부분 panel1_MouseDown() 함수에서 돌 하나 그리는 부분을 추출하여 함수로 만든다 // OnPaint() 함수 protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); draw바둑판(); draw돌들(); } // 자료구조에서 돌들을 읽어서 다시 그려줌 private void draw돌들() for (int i = 0; i < 19; i++) for (int j = 0; j < 19; j++) if (바둑판[i, j] != STONE.none) drawAStone(i, j); panel1_MouseDown() 함수에서 돌 하나 그리는 부분을 추출하여 함수로 만든다

6. 메뉴 : 다시 시작 // 다시시작 메뉴 처리함수 private void 다시시작ToolStripMenuItem_Click(object sender, EventArgs e) { 1. 자료구조의 초기화 2. flag 초기화 : 흑돌부터 시작 3. 바둑판 지우기 4. 바둑판 다시 그리기 }

7. 오목 진행 사항 저장(복기) 오목게임의 복기 돌이 놓인 순서대로 저장하여야 함 List<T> 클래스를 사용 여기서 <T> 는 x, y, 흑/백을 나타내는 class를 만들어서 사용 using System.Collections.Generic; List<Bokki> list = new List<Bokki>(); public class Bokki { public int X { get; set; } public int Y { get; set; } public char Stone { set; get; } // 생성자 public Bokki(int x, int y, char stone) X = x; Y = y; Stone = stone; } private void 복기ToolStripMenuItem_Click(object sender, EventArgs e) { PrintList(); } // 테스트를 위해 List<Bokki> list를 출력 private void PrintList() { string s = ""; foreach(Bokki su in list) s += su.X + "," + su.Y + ":" + su.Stone + "\n"; } MessageBox.Show(s);

복기 테스트