Coding/JavsScript 삽질기2020. 9. 10. 01:40

자바스크립트를 이용하여 테트리스를 만들고, 이를 Android의 WebView를 이용하여 Android 앱으로 만들어 보았다.

소스코드: github.com/chobocho/JsTetris

 

chobocho/JsTetris

Javascript tetris. Contribute to chobocho/JsTetris development by creating an account on GitHub.

github.com

다운로드: play.google.com/store/apps/details?id=com.chobocho.jstetris

 

Classic Block Game V2 - Google Play 앱

Simple block game

play.google.com

웹 브라우저로 해보기 (크롬에서만 동작 확인을 했습니다)

www.chobocho.com/game/tetris/tetris.html

 

Chobocho's Tetris

 

www.chobocho.com

* 사용키 : 방향키, 스페이스 (블록 아래로 내리기), Ctrl (Hold), S (Start / Resume), P (Pause)

 

Posted by chobocho
Coding/Python 삽질기2020. 8. 25. 23:00

'Coding > Python 삽질기' 카테고리의 다른 글

[Python] 폴더 안의 파일 이름 검색하기  (0) 2020.10.28
[Python][AI] XOR 예제  (0) 2020.08.03
[Python][AI] Perceptron 예제  (0) 2020.07.28
Posted by chobocho
Coding/Python 삽질기2020. 8. 3. 22:33

아래와 같이 1개의 은닉층을 가진 신경망을 구성해 보았습니다.

 

import numpy as np

def sigmoid(x):
    return 1/(1+np.exp(-x))


def DeltaSGD(W1, W2, X, D):
    alpha = 0.9
    
    idx = 0
    for k in X:
        a1 = np.dot(W1, k)
        z1 = sigmoid(a1)
        
        a2 = np.dot(W2, z1)
        y = sigmoid(a2)
        
        e = D[idx] - y
        delta = y * (1-y) * e
        
        e1 = W2 * delta
        delta1 = z1 * (1-z1) * e1

        dw1 = alpha * delta1
        dw1 = dw1.reshape(4,1)
        x = k.reshape(1,3)
        W1 += np.dot(dw1, x)
        
        dw2 = alpha * delta * z1
        W2 += dw2
        idx+=1

        
def Train(epoch, x, y, W1, W2):
    for ep in range (epoch):
        DeltaSGD(W1, W2, x, y)

        
def main():
    W1 = np.random.randn(4,3)
    W2 = np.random.randn(4)
    x = np.array([[0, 0, 1], [0, 1, 1], [1, 0, 1], [1, 1, 1]])
    y = np.array([0, 1, 1, 0])
    trainCount = 10000

    print('---Before Training---')
    print(W1)
    print(W2)
    print('---After Training---')
    Train(trainCount, x, y, W1, W2)
    print(W1)
    print(W2)
    
    print('---Result---')
    for k in x:
        a1 = np.dot(W1, k)
        z1 = sigmoid(a1)
        
        a2 = np.dot(W2, z1)
        y = sigmoid(a2)
        print(y) 
        
        
if __name__ == '__main__':       
    main()        
---Before Training---
[[-0.82542712 -0.65157477  0.09131077]
 [-0.12367401  1.07601221 -1.43941252]
 [-1.00401084 -0.04547823  0.97194216]
 [ 0.02719329 -0.22932678 -0.45809196]]
[ 0.16840571 -0.55206913  1.75255171 -0.54203599]
---After Training---
[[-6.3608461  -6.35976778  2.71126418]
 [ 3.61918383  3.62562196 -5.65337702]
 [-3.70117648 -3.70158904  5.76910815]
 [-1.51981715 -1.56682777 -0.58710802]]
[-11.12882426  -6.71646542   6.50908732  -1.52377049]
---Result---
0.01083108954199271
0.9896067125952175
0.9895881791368779
0.01040259419256147

 

'Coding > Python 삽질기' 카테고리의 다른 글

[Pygame] Paper Plane Game 만들기  (0) 2020.08.25
[Python][AI] Perceptron 예제  (0) 2020.07.28
[Python] fisher-yates shuffle  (0) 2020.07.20
Posted by chobocho
Coding/Python 삽질기2020. 7. 28. 23:56

 

import numpy as np

def sigmoid(x):
    return 1/(1+np.exp(-x))


def DeltaSGD(W, X, D):
    alpha = 0.9
    dwSum = np.array([0] * 3)
    
    idx = 0
    for k in X:
        a1 = np.dot(k, W)
        y = sigmoid(a1)
        
        e = D[idx] - y
        delta = y * (1-y) * e
        
        dw = alpha * delta * k
        W += dw
        idx+=1

        
def Train(epoch, x, y, W1):
    for ep in range (epoch):
        DeltaSGD(W1, x, y)

        
def main():
    W1 = np.random.randn(3)
    x = np.array([[0, 0, 1], [0, 1, 1], [1, 1, 1], [1, 0, 0]])
    y = np.array([1, 1, 1, 0])

    Train(10000, x, y, W1)
    
    for k in x:
        a1 = np.dot(k, W1)
        z1 = sigmoid(a1)
        print(z1)    
        
        
if __name__ == '__main__':       
    main()  

 

0.9962960119369554
0.9999259998523653
0.9929612087250037
0.010332095384834877

'Coding > Python 삽질기' 카테고리의 다른 글

[Python][AI] XOR 예제  (0) 2020.08.03
[Python] fisher-yates shuffle  (0) 2020.07.20
강아지 나이 계산기  (0) 2020.07.16
Posted by chobocho
Coding/Python 삽질기2020. 7. 20. 23:27
import random

number = [1, 2, 3, 4, 5, 7, 8]

def shuffle(number):
   for i in range (len(number)-1, 0, -1):
       j = random.randint(0, i)
       number[j], number[i] = number[i], number[j]
    
shuffle(number)

 동작을 보면 아래와 같이 변화 한다

[1, 2, 3, 4, 5, 7, 8]
[1, 8, 3, 4, 5, 7, 2]
[1, 8, 3, 4, 5, 7, 2]
[1, 8, 3, 4, 5, 7, 2]
[1, 8, 3, 4, 5, 7, 2]
[3, 8, 1, 4, 5, 7, 2]
[3, 8, 1, 4, 5, 7, 2]

* 참고: https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle

'Coding > Python 삽질기' 카테고리의 다른 글

[Python][AI] Perceptron 예제  (0) 2020.07.28
강아지 나이 계산기  (0) 2020.07.16
[Python] 소인수 분해  (0) 2020.07.10
Posted by chobocho
Coding/Python 삽질기2020. 7. 16. 00:19

강아지 나이를 인간 나이로 바꿔주면 위와 같은 그래프가 나온다고 한다.

강아지 나이 와 인간 나이 변환표

소스코드: https://github.com/chobocho/dog_age

'Coding > Python 삽질기' 카테고리의 다른 글

[Python] fisher-yates shuffle  (0) 2020.07.20
[Python] 소인수 분해  (0) 2020.07.10
[ChoboTimer] Version 0.17 Release  (0) 2020.04.22
Posted by chobocho
Coding/Python 삽질기2020. 7. 10. 00:07
import math

def get_prime_factor(number):
    result = []

    if number < 2:
        return result

    while number % 2 == 0:
        result.append('2')
        number /= 2

    for i in range (3, int(math.sqrt(number)) + 1, 2):
        if number % i == 0:
            result.append(str(i))
            number /= i

    if number > 2:
        result.append(str(int(number)))

    return result

def testPrimeFactor():
    assert len(get_prime_factor(-1)) == 0
    assert "2x2x3" == 'x'.join(get_prime_factor(12))
    assert "2x2x5x5" == 'x'.join(get_prime_factor(100))
    assert "67x337x2797x14251" == 'x'.join(get_prime_factor(900000001213))

if __name__ == '__main__':
    testPrimeFactor()

'Coding > Python 삽질기' 카테고리의 다른 글

강아지 나이 계산기  (0) 2020.07.16
[ChoboTimer] Version 0.17 Release  (0) 2020.04.22
[Python] venv 사용  (0) 2020.04.15
Posted by chobocho
My Life/Book Story2020. 6. 30. 22:56

코로나로 방콕하면서 재미있게 읽은 무협지/판타지를 공유합니다.

* 아빠가 너무 강함 (https://ridibooks.com/books/2065032978)

* 전생검신 (https://ridibooks.com/books/2989000033)

* 절대검감 (https://ridibooks.com/books/425169791)

* 천마는 조용히 살고 싶다 (https://ridibooks.com/books/1534090825)

* 템빨 (https://ridibooks.com/books/2200000993)

* 환생표사(https://ridibooks.com/books/2057115028)

 

 

'My Life > Book Story' 카테고리의 다른 글

내돈내산 Publy(퍼블리) 사용기  (1) 2022.10.06
10000 페이지 읽기  (0) 2013.02.18
내 맘대로 추천 도서 ( IT )  (0) 2012.06.30
Posted by chobocho
Trash2020. 6. 30. 22:46

나이가 들어가면서, 좀더 어릴때 열심히 해둘껄 하고 후회하는 것들이 하나 둘 씩 들어간다.

그중에 하나가 영어 공부다.

결국 자의 혹은 타의에 의해 공부를 하게 되는데, 

공부를 미룰 수록 고통이 증가한다. 마치 치질 수술 처럼...

치질 수술도 미루고 미루면, 미룬 만큼 수술 후 엄청난 고통(?)의 시간을 가져야 한다.

나이가 들수록 기억력도 감퇴하고, 시간도 부족하다.

글로벌화 시대에, 영어는 필수가 아닌 생존이다.

최신 IT자료는 대부분 영어로 나오며, 한글로 번역된 자료를 받아서 공부하면 

남보다 뒤쳐질 수 밖에 없다.

영어가 필요하다면 미루지 말고 '바로 지금 시작하시라' 

'Trash' 카테고리의 다른 글

메모  (38) 2005.08.31
계획표  (0) 2005.08.23
Posted by chobocho
Coding/Java 삽질기2020. 5. 14. 08:54

자연스러운 카드 이동 화면 구현

카드를 마우스로 드래그 하여 이동할 경우, 드래그를 시작한 마우스의 좌표(smx, smy) 와

카드의 좌측 상단 포인트 (scx, scy)에서 가로, 세로 차이 W (scx - smx), H (scy - smy)를 구합니다.

그리고 마우스를 드래그 하는 동안 마우스 커서 위치에 카드를 그려야하는데,

현재의 마우스 좌표 (mx, my) 에서 위 에서 구한 W, H 의 거리만큰 이동한

(cx = mx - W, cy = my - H)를 시작 점으로 하여 카드 이미지를 그려주면,

자연스러운 카드 이동 화면을 구현 할 수 있습니다.  

 

참고소스:

https://github.com/chobocho/solitaire/commit/cf83dcc10c0c890aaf0cda1f73323a33f7092d87

Posted by chobocho