PyInstaller Hidden Import

2018.06.29 00:35

보호되어 있는 글입니다. 내용을 보시려면 비밀번호를 입력하세요.

Random

CODING/UNITY 5 2018.05.10 11:49
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class DistanceCalcurator : MonoBehaviour {
    int randomSeed;
 
    void Start () {
        //randomSeed = (int)System.DateTime.Now.Ticks; //현재 시간을 밀리초 단위로 반환
        //Random.seed = randomSeed; // Random 함수 Seed 값 설정, 설정하지 않아도 무방
    }
 
    void Update () {
        int randomInteger = Random.Range (-1010); // 정수 형태 Random 값
        Debug.Log (randomInteger);
 
        float randomFloat = Random.Range (-10.0f, 10.0f); // 실수 형태 Random 값
        Debug.Log (randomFloat);
 
        int valueLimit = 10;
        float limitedValue = Mathf.Clamp (valueLimit, 15);
        Debug.Log (limitedValue);
    }
}
cs


'CODING > UNITY 5' 카테고리의 다른 글

Random  (0) 2018.05.10
Game Object간 거리 계산(Vector3.Distance)  (0) 2018.05.10
Update 함수의 종류  (0) 2018.04.21
충돌처리 전제조건  (0) 2018.03.22

WRITTEN BY
Yena아빠
코딩하는 초등교사

트랙백  0 , 댓글이 없습니다.
secret

Vector3.Distance 함수는 두 개의 GameObject 사이의 거리를 구하는 데 사용합니다. 두 GameObject의 중심점을 기준으로 한 가상의 삼각형의 길이를 피타고라스의 정리를 이용하여 계산하여 Game Object간의 거리를 구할 수 있습니다.


 



  아래의 코드는 두 Game Object의 거리를 출력하는 간단한 예입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class DistanceCalcurator : MonoBehaviour {
 
    public GameObject cube1;
    public GameObject cube2;
    float cubeDistance;
 
    void Start () {
        cubeDistance = Vector3.Distance (cube1.transform.position, cube2.transform.position);
        Debug.Log (cubeDistance);
    }
}





위와 동일한 기능을 하는 것은 Vector 클래스의 magnitude 변수입니다. magnitude 변수는 Vector 클래스에 저장된 좌표값의 거리를 피타고라스의 정리를 이용하여 자동으로 계산해 줍니다.

'CODING > UNITY 5' 카테고리의 다른 글

Random  (0) 2018.05.10
Game Object간 거리 계산(Vector3.Distance)  (0) 2018.05.10
Update 함수의 종류  (0) 2018.04.21
충돌처리 전제조건  (0) 2018.03.22

WRITTEN BY
Yena아빠
코딩하는 초등교사

트랙백  0 , 댓글이 없습니다.
secret

1. Update : Update 함수는 프레임이 렌더링되기 전에 호출되고 애니메이션이 계산되기 전에도 호출됩니다.

 

2.  FixedUpdate : 개발툴에서 설정한 초당 프레임 수만큼 일정하게 호출됩니다.

 

3. LateUpdate :  Update 가 끝난 후 프레임당 한 번 호출됩니다.

'CODING > UNITY 5' 카테고리의 다른 글

Random  (0) 2018.05.10
Game Object간 거리 계산(Vector3.Distance)  (0) 2018.05.10
Update 함수의 종류  (0) 2018.04.21
충돌처리 전제조건  (0) 2018.03.22

WRITTEN BY
Yena아빠
코딩하는 초등교사

트랙백  0 , 댓글이 없습니다.
secret

유니티의 충돌 처리는 Trigger 이벤트나 Collider 이벤트가 발생하였을 때 처리할 수 있습니다.

 Trigger 이벤트와 Collider 이벤트가 발생하는 전제조건은 아래와 같습니다.

 

1. 충돌할 두 Game Object는 모두 Collider 컴포넌트가 있어야 합니다.

2. 둘 중 하나의 Game Object에 반드시 Rigid Body 컴포넌트가 있어야 합니다.

'CODING > UNITY 5' 카테고리의 다른 글

Random  (0) 2018.05.10
Game Object간 거리 계산(Vector3.Distance)  (0) 2018.05.10
Update 함수의 종류  (0) 2018.04.21
충돌처리 전제조건  (0) 2018.03.22

WRITTEN BY
Yena아빠
코딩하는 초등교사

트랙백  0 , 댓글이 없습니다.
secret

버림


 

자연수 / 10을 한 몫을 구하면 자연스럽게 1의 자리 수가 나머지로 절삭되는 알고리즘을 활용하여 자연수 / 10 * 10을 하여 버림 계산을 할 수 있습니다..

 

 

125 / 10 = 12 (정수이므로 소수점은 절삭됨)
12 * 10 = 120 (다시 10을 곱해주면, 버림이 된다.)

 

 

위의 예를 조금 확장하면, 십의 자리에서 버림도 가능합니다. 물론 그 이상의 수의 버림도 가능하겠죠?

 

525 / 100 = 5
5 * 100 = 100

 

 

반올림


5보다 큰 수에 5를 더하면 다음 차수가 1이 커지고, 5보다 작은 수에 5를 더하면 다음 차수는 변하지 않는 것을 이용합니다.

 

126 + 5 = 131
// 버림 수행
131 / 10 = 13
13 * 10 = 130

122 + 5 = 127
127 / 10 = 12
12 * 10 = 120

 

 

마찬가지로 확장해보면,

 

 

125 + 50 = 175
175 / 100 = 1
1 * 100 = 100
175 + 50 = 225
225 / 100 = 2
2 * 100 = 200

 

이렇게 하면, 10의 자리에서 반올림 하는 것도 가능합니다.

 

올림 


 

올림은 1~9를 다음 차수의 1을 더해주는 것이므로 정수에 9를 더한 뒤에 버림을 수행하면 해결할 수 있습니다.

 

 

120 + 9 = 129
129 / 10 = 12
12 * 10 = 120

123 + 9 = 132
132 / 10 = 13
13 * 10 = 130

마찬가지로 확장하면

105 + 90 = 195
195 / 100 = 1
1 * 100 = 100

115 + 90 = 205
205 / 10 = 2
2 * 100 = 200

 


WRITTEN BY
Yena아빠
코딩하는 초등교사

트랙백  0 , 댓글이 없습니다.
secret

수업을 준비하며


 

강의에 앞서 이번 주제를 직접 제작하보면서 느끼고 새롭게 알게된 점은 이것이 바로 깊이 우선 탐색과 너비 우선 탐색, 알파고와 같은 인공지능의 기본이 되는 게임이었다는 것입니다.

그리고 새삼 Elementary School을 다니는 어린 나이에 이 게임을 완성한 빌 게이츠가 다시 한 번 대단하다고 느껴졌구요.

 

 

 

 

Tic-Tac-Toe Code 


 

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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#include<stdio.h>
 
char dpArr[] = {'1','2','3','4','5','6','7','8','9'}; // 표시되는 틱택토 타일
int target; // 타겟 배열원소
int totalCount = 0// 디스플레이 함수에서 사용되는 함수
int player; // 플레이어 이름 변수로 1 또는 2가 저장됨
int playEnd = 0// 돌 잘못늫은 경우가 있는지를 판단하여 저장하는 변수 1이면 잘 두었음, 잘 못 두었으면 0으로 저장됨
int winner = 0// 누가 이겼는지를 판단하는 변수. 1이면 1 플레이어, 2면 2 플레이어, 3이면 비김을 나타냄
int gameCount = 0// 총 돌을 놓은 횟수
 
void display (void) { // 틱택토 말 표시하는 함수
    int i;
    int count = 0;
    for (i = 0; i < 9; i++) {
        printf("%c", dpArr[i]);
        if (count==2 || count == 5) {
            printf("\n");
        } else {
            printf("\t");
        }
        count++;
    }
}
 
void play (void) { // 사용자의 입력을 받아 돌 놓는 함수
    printf("\n%d Player select Tic-Tac-Toe : ", player);
    scanf("%d", &target);
    target--;
}
 
char check1(int param1) { // 사용자의 입력받은 말이 이미 놓여진 말인지 판단하는 함수. 이미 있는 곳에 말을 놓으면 y, 아니면 n 반환
    if (dpArr[param1] == 'x' || dpArr[param1] == 'y') {
        return 'n';
    } else {
        return 'y';
    }
 
void insertNum (int param1) { // 사용자가 입력받은 말이 없는 경우 말을 놓는 함수, 배열에 플레이어에 다라 x 혹은 y를 입력한다.
    if (player == 1) {
        dpArr[param1] = 'x';
    } else {
        dpArr[param1] = 'y';
    }
    playEnd = 1;
}
 
int checkWin (void) {
    char tempS = dpArr[target]; // 플레이어가 놓은 말을 확인.. x인지, y인지..
    int winCount = 0// 이길 수 있는 3목 조건 같은 것이 3개인지 확인함
    int i;
    int j;
    int arrCount = 0;
    
    for (i = 0; i <3; i++) { //가로 탐색
        for (j = 0; j < 3; j++) { // 행별로 탐색 시작
            if (dpArr[arrCount] == tempS) {
                winCount++;
            }
            if (winCount == 3) { // 가로로 3번 모두 같은 모양이라면, 즉 3목을 만들었다면
                return player; //반환하고 종료
            }
            arrCount++// 배열카운트 1 넘김
        } // 헹별로 탐색 끝
        winCount = 0// 윈 카운트 초기화
    } //가로 탐색 꿑
 
    arrCount = 0// 배열 탐색 카운트 초기화
 
    for (i = 0; i < 3; i++) {    // 세로 탐색
        for (j = 0; j < 3; j++) { // 열별로 탐색 시작
            if (dpArr[arrCount] == tempS) {
                winCount++;
            }
            if (winCount == 3) {
                return player;
            }
            arrCount += 3;
        } // 열 별로 탐색 끝
        arrCount -= 5;
        winCount = 0;
    } // 세로 탐색 끝
 
    arrCount = 0// 배열 탐색 카운트 초기화
 
    for (i = 0; i < 2; i++) { // 대각선 탐색 시작
        for (j = 0; j < 3; j++) { // 선별로 탐색 시작
            if (dpArr[arrCount] == tempS) {
                winCount++;
            }
            if (winCount == 3) {
                return player;
            }
            arrCount += 4;
        } // 열별로 탐색 종료
        arrCount -= 6;
        winCount = 0;
    } // 대각선 탐색 끝
 
    if (gameCount == 9) {
        return 3;    
    }
 
    return 4;
    
}
 
int main (void) {
    int flag1 = 1// 게임 종료시 무한루프 빠져나오는 플랙 변수
    player = 1// 플레이어 이름
    
    printf("==Tic-Tac-Toe Game==\n"); // 게임 시작
    display(); // 초기 틱택토 표시
 
    while(flag1 == 1) { // 플렉1이 1일때 무한루프, 빠져나오려면 flag1을 0으로 만들어야 함
        
        while(playEnd == 0) { // 잘못 둔 경우 다시 놓게 하는 무한 루프, 벗어나기 위해서는 플레이 엔드 변수에 1을 대입하면 됨
            
            play(); // 자리를 선택하는 변수
 
            char c1 = check1(target); // 자리에 이미 둔 돌이 있는지를 확인함
 
            if (c1 == 'n') { // 둔 돌이 없다면
                printf("Oh, No.. Please Select One more Time~!\n"); // 다시 해야 함 하는 메세지 표시
                display();
                continue// 다음 반복 수행
            } else { // 만약 둔 돌이 있다면 
                break;
            }
        } // 플레이어 돌놓기 무한루프 함수 꿑
 
        insertNum(target); //돌을 입력
        display(); // 틱택토 표시
 
        playEnd = 0// 다시 돌을 잘못둔 경우 무한루프 경우의 수를 초기화함
 
        gameCount++;
 
        
        int isEnd = checkWin();
 
        if (isEnd == 1) {
            winner = 1;
            flag1 = 0;
        } else if (isEnd == 2) {
            winner = 2;
            flag1 = 0;
        } else if (isEnd == 3) {
            winner = 3;
            flag1 = 0;
        }
 
        if (player == 1) { //플레이어 바뀨는 플래그 명령 1이면 2 2면 1
            player = 2;
        } else {
            player = 1;
        }
    } // 게임 무한 루프 함수 끝
 
    switch (winner) { // 승패 가리기
        case 1 : printf("\nWinner is 1 Player!!!\n"); break// 위너 변수가 1이라면 플레이어 1이 승자
        case 2 : printf("\nWinner is 2 Player!!!\n"); break// 위너 변수가 2이라면 플레이어 1이 승자
        case 3 : printf("\nThis Game is Draw....\n"); break// 위너 변수가 3이라면 플레이어 1이 승자
    }
}
cs

 

 

제언


 

항상 GUI 프로그래밍만 하다가 처음으로 만들어보는 주제라 매우 헷갈리고 버벅였지만.. 그래도 다행히 잘 동작은 합니다.

이차원 배열을 사용했다면 탐색이 보다 쉬웠을까요? 생각보다 논리적이지 않은 코드가 나온 것 같아 아쉽네요.

여러분들에게 다음과 같은 질문을 던지고 싶습니다.

 

 

1. 컴퓨터와 인간이 게임을 하는 프로그래밍 (알파고처럼 필승의 기법을 찾는 알고리즘을 제작해 보는 것도 좋을 듯 합니다.)

2. 먼저 하는 쪽이 유리하다고 판단하기 때문에 가위바위보로 먼저 하는 유저를 고르는 기능을 추가하기

3-1. 다시 하시겠습니까? 하는 질문을 던져 계속 게임을 하도록 유도하는 기능을 추가하기

3-2. 컴퓨터, 혹은 다른 유저와의 틱택토 게임에서 승패를 보여주는 기능 추가하기

 

여러분들은 할 수 있을거라고 생각합니다.

개인적으로 1번은 저는 불가능할 것 같기는 하네요..

'EDUCATION > Gifted' 카테고리의 다른 글

Tic-Tac-Toe (Console)  (0) 2016.06.11

WRITTEN BY
Yena아빠
코딩하는 초등교사

트랙백  0 , 댓글이 없습니다.
secret

 

별을 이용한 삼각형 그리기


 

2중 for 문을 사용하여 다음 삼각형을 그려 보시오.

 

 

 

1
2
3
4
5
6
7
8
myLine = 4
for i in range(0,5) :
    for j in range(0,myLine) :
        print(" ", end="")
    for k in range(myLine,5) : 
        print("*", end="")
    myLine-= 1
    print("")
cs

 

 

 

1
2
3
4
5
6
7
8
myLine = 0
for i in range(0,5) :
    for j in range(0,myLine) :
        print(" ", end="")
    for k in range(myLine,5) : 
        print("*", end="")
    myLine+= 1
    print("")

cs

 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
myLine = 4
myLine2 = 0;
for i in range(0,5) :
    for j in range(0,myLine) :
        print(" ", end="")
    for k in range(myLine,5) : 
        print("*", end="")
    for l in range(0,myLine2) : 
        print("*", end="")
    myLine-=1
    myLine2 += 1
    print("")
cs

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
myLine = 0
myLine2 = 4;
for i in range(0,5) :
    for j in range(0,myLine) :
        print(" ", end="")
    for k in range(myLine,5) : 
        print("*", end="")
    for l in range(0, myLine2) : 
        print("*", end="")
    myLine += 1
    myLine2 -= 1
    print("")
cs

'CODING > PYTHON 3' 카테고리의 다른 글

반복문 예제  (0) 2016.05.19
형변환  (0) 2016.05.02
Python Lotto (Console)  (0) 2016.04.24
SELF  (0) 2016.04.24
Python 3 클래스 - 클래스. 인스턴스 생성  (0) 2016.04.17
파이썬 자동완성 플러그인 및 C 개발환경 구축 방법 - Sublime Text 3  (0) 2016.01.25

WRITTEN BY
Yena아빠
코딩하는 초등교사

트랙백  0 , 댓글이 없습니다.
secret

형변환

CODING/PYTHON 3 2016.05.02 10:30

 

 

Input


 

파이썬은 콘솔창과 GUI 입력창을 통해서 사용자로부터 다양한 정보를 입력받을 수 있습니다. 이 때 모든 입력된 내용은 문자열 (String)형식으로 저장됩니다.

 

1
2
= input("Insert Number : ")
print(type(a))
cs

 

해당변수의 자료형을 출력하는 type()함수를 사용하여 출력하면 a변수에 저장된 값은 아래 그림과 같이 문자열(String)으로 나타나게 됩니다.

 

 

두 수를 입력받아 그것을 더하는 프로그램을 제작하고 싶다면 문자열 자료를 숫자형 자료로 바꿔야 합니다. 형변환을 하지 않고 코드를 작성하게 되면 다음과 같은 문제점이 발생할 것입니다.

 

1
2
3
= input("Insert Number : ")
= input("Insert Number : ")
print(a+b)
cs

 

 

 

문자열과 문자열을 더했기 때문에 85가 아닌 3055라는 문자열이 출력되었습니다.

따라서 문자를 숫자로 변환시켜주는 작업이 필요합니다.

프로그래밍에서는 문자형 자료를 숫자형 자료로 바꾸는 것처럼 변수에 저장된 자료의 형태를 다른 형태로 바꾸는 것을 형변환이라고 합니다.

 

 

To Number (int, float, long, complex)


 

형변환의 기본 형식은 아래와 같습니다.

 

바꾸고자 하는 자료형 ( 바꿀 자료 )

 

만약 특정 자료를 정수형으로 바꾸고자 한다면 int(문자열)로 코딩하면 됩니다.

 

1
2
3
= input("Insert Integer : ")
= int(a)
print(type(b))
cs

 

 

문자열을 정수로 바꾸는 방법 이외에도 다양한 숫자 형태로 문자열을 바꿀 수 있습니다.

 

1
2
3
4
int("111"#정수
float("123.456"#실수
long("12345678912345678L")
complex("3+5j"#복소수
cs

 

 

To String (str)


 

문자열 형변환은 숫자 형변환과 동일한 형식을 가지며 str이라는 접두어를 이용합니다.

 

1
2
3
= str(12345)
print(a)
print(type(a))
cs

 

 

 

 

Character To Integer & Integer To Character


 

 

미국정보교환표준부호(American Standard Code for Information Interchange)인 아스키 코드는 특수문자와 영문자(대소문자)를 표현하기 위해 정해진 규약으로 032부터 127까지의 숫자에 각각 문자를 대응시킨 코드입니다.

파이썬에서는 정수형 변수에 대응하는 아스키코드 값으로 그 형태를 변환시키는 접두어인 chr, 반대로 문자를 아스키코드 값으로 형변환하는 접두어인 ord를 제공합니다.

 

1
2
3
print(chr(a)) #숫자에 대응하는 아스키코드 값 출력 
= 'a'
print(ord(b))
cs

 

 

 

 

 

'CODING > PYTHON 3' 카테고리의 다른 글

반복문 예제  (0) 2016.05.19
형변환  (0) 2016.05.02
Python Lotto (Console)  (0) 2016.04.24
SELF  (0) 2016.04.24
Python 3 클래스 - 클래스. 인스턴스 생성  (0) 2016.04.17
파이썬 자동완성 플러그인 및 C 개발환경 구축 방법 - Sublime Text 3  (0) 2016.01.25

WRITTEN BY
Yena아빠
코딩하는 초등교사

트랙백  0 , 댓글이 없습니다.
secret

 

 

 

Random


 

Random 모듈은 특정한 범위에서 임의의 숫자를 생성하는 모듈로 정수형 숫자를 반환하는 randint() 함수, List 내의 데이터를 선택하는 choice() 함수, 주어진 범위 내에서 원하는 갯수만큼 샘플을 뽑는 sample() 함수, 0~ 1 사이의 소수값을 구하는 random() 함수, 범위 내의 임의의 값을 구하는 randrange() 함수 등을 제공합니다.

 

1
2
3
4
5
6
7
8
9
import random
 
base = [1,2,3,4,5]
rand1 = random.choice(base) #주어진 리스트에서 임의의 값을 Choice함
print(rand1)
print(random.sample(range(1,46), 6)) # 범위 내에서 원하는 갯수만큼 임의로 선택함
print(random.random()) # 0~1 사이의 임의의 값을 출력함
print(random.randrange(1,46), 1# 정해진 범위 내에서 임의의 값을 출력함
print(random.randint(1,46)) # 주어진 범위 내에서 임의의 정수를 출력함
cs

 

Lotto 번호 추첨기 같은 경우 sample 함수를 사용하면 꽤 쉽게 구현할 수 있었을텐데 randint() 함수만 확인하고 바로 코딩하는 바람에 반복문이 익숙하지 않아 버벅였습니다. 역시 라이브러리 웹페이지를 미리 본 후 코딩을 해야겠습니다.

 

 

randint()를 이용한 Lotto 번호 추첨


 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import random
 
isAlready = False
myFlag = False
lottoNumber = []
while myFlag == False :
    myNum = random.randint(1,46# Make Random Integer
    if len(lottoNumber) == 0 :  # Length is 0, Insert Number
         lottoNumber.append(myNum)
    else :
        for i in range(len(lottoNumber)) :
            if lottoNumber[i] == myNum : 
                isAlready = True
            if isAlready == False :
                lottoNumber.append(myNum)
            if len(lottoNumber) == 6 : 
                myFlag = True
    else : 
        pass
for i in range(len(lottoNumber)) :
    tempstring = "{0}st Numebr is {1}".format(i+1, lottoNumber[i])
    print(tempstring)
cs

 

 

 

 

sample()를 이용한 Lotto 번호 추첨


 

1
2
3
4
5
6
7
8
import random
myarr = []
for i in (range(1,46,1)) : 
    myarr.append(i)
randarr = random.sample(myarr,6)
for j in range(len(randarr)) :
    temps = "{0}st Number is {1}".format((j+1), randarr[j])
    print(temps)
cs

 

 

 

 

 

input()을 활용한 게임 숫자 입력받기


 

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
import random
#Set Game Count
mycount = int(input("Game Number : "))
#Declare Lotto Array
myarr = []
#Declare Lotto Data
lottodata = []
#Set Lotto Data
for i in (range(1,46,1)) : 
    myarr.append(i)
#Set Empty Array
for i in range(mycount) :
    temparr = []
    lottodata.append(temparr)
#Set Lotto Array
for i in range(mycount) :
    temparr = random.sample(myarr,6)
    lottodata[i] = temparr
# Print Data
for i in range(mycount) :
    print("%d's Game" %(i+1))
    print("====================")
    for j in range(len(lottodata[i])) :
        print("%d's Number is %d" %((j+1), lottodata[i][j]))
    print("====================")
cs

 

 

 

 

 

 

'CODING > PYTHON 3' 카테고리의 다른 글

반복문 예제  (0) 2016.05.19
형변환  (0) 2016.05.02
Python Lotto (Console)  (0) 2016.04.24
SELF  (0) 2016.04.24
Python 3 클래스 - 클래스. 인스턴스 생성  (0) 2016.04.17
파이썬 자동완성 플러그인 및 C 개발환경 구축 방법 - Sublime Text 3  (0) 2016.01.25

WRITTEN BY
Yena아빠
코딩하는 초등교사

트랙백  0 , 댓글이 없습니다.
secret