[게임] lightbot 게임 간단히 만들기

Posted by 백창
2014.09.03 19:48 개발/C언어


 해커톤이란?


 '해킹(hacking)'과 '마라톤(marathon)'의 합성어다. 해커톤은 정보기술(IT) 기업에서 흔하게 활용되는데, 미국 소셜네트워크서비스 페이스북(Facebook)은 평소 직원들에게 밤새 음식과 간식을 제공하면서 아이디어와 생각을 직접 만들어 보게 하는 해커톤을 지속적으로 개최하여 많은 이득을 보았다.


 Lightbot


 유아용 소프트웨어 교육용 게임 Lightbot이다. 어린 아이들이 소프트웨어에 쉽게 접근할 수 있게 게임으로 소프트웨어의 특징을 나타낸 게임이다.



플레이 화면을 보면 마치 C언어를 짜듯이 프로시져와 메인 함수로 이루어진 UI를 볼 수 있다.



 구현


 이제 팀을 이루어 가장 자신있는 언어로 Lightbot 게임을 40여분 동안 제작하였다.

 4명이 팀을 이루었지만 소스코드는 단 한명이 작성을 해야하고 나머지 팀원은 여러 가지 의견을 제시하여 소스코드를 작성 하는 동시에 소스코드를 리뷰할 수 있게 진행되었다.


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
#include <stdio.h>
int i;                //입력 받은 명령의 개수
int command[100];    //입력 받은 명령
int direction;        //캐릭터가 보는 방향
int x, y;            //x축 y축
 
int path[5][5] = {    //게임 맵
    { 2, 0, 1, 1, 1 },
    { 1, 0, 1, 1, 1 },
    { 1, 0, 1, 1, 1 },
    { 1, 0, 1, 1, 1 },
    { 1, 0, 0, 0, 3 }
};
 
/*게임 맵 출력*/
void printGame(){
    int i, j;
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5; j++)
            printf("%d ", path[i][j]);
        printf("\n");
    }
}
/*방향에 따른 전진*/
void foward()
{
    if (direction == 0&&y<4)
        y++;
    else if (direction == 1 && x<4)
        x++;
    else if (direction == 2 && 0<y)
        y--;
    else if (direction == 3 && 0<x)
        x--;
    path[x][y] +=1;
}
/*방향 전환*/
void turnLeft()
{
    direction=(direction - 1)%4;
}
void turnRight()
{
    direction = (direction + 1) % 4;
}
/*목적지 도달*/
void lightOn()
{
    path[x][y] -= 3;
}
/*성공여부 측정*/
int checkGame()
{
    int a, b;
    for (a = 0; a < 5; a++)
    {
        for (b = 0; b < 5; b++)
        {
            if (path[a][b] != 1)
                return -1;
        }
    }
    return 1;
}
/*명령 수행*/
void action()
{
    int a;
    for (a = 0; a <= i; a++)
    {
        if (command[a] == 1)
            foward();
        else if (command[a] == 2)
            turnLeft();
        else if (command[a] == 3)
            turnRight();
        else if (command[a] == 4)
            lightOn();
        else if (command[a] == -1)
        {
            if(checkGame()==-1)
                printf("실패\n");
            else printf("성공\n");
        }
        printf("\n");
        printf("<%d번째>\n", a + 1);
        printGame();
    }
}
 
void main(void){
 
    printGame();
    printf("\n명령어를 입력해주세요(Foward: 1, LeftTurn: 2, RightTurn: 3, lightOn: 4, Exit: -1): ");
    for (i = 0;; i++)
    {
        scanf_s("%d", &command[i]);
        if (command[i] == -1)
        {
            break;
        }
    }
    path[x][y] -= 1;
    action();
}
//1 3 1 1 1 1 2 1 1 1 4 -1


 결과


 먼저, 게임 맵이 나타나고 2에서 시작하여 3으로 이동하고, 0이 이동할 수 있는 경로이다. 올바른 경로로 이동하면 모든 배열이 1이되어 게임이 종료된다.

프로그램을 실행하여 정답에 맞는 명령을 적으면 다음과 같이 성공 화면이 나타난다.



Tags
이 댓글을 비밀 댓글로

[알고리즘] N-여왕말 문제(몬테칼로 추정치 - 되추적)

Posted by 백창
2014.08.26 19:45 개발/C언어

 개요


 몬테칼로 추정치는 해답을 모두 찾기 위해서 검사하리라 생각되는 마디의 총 개수를 추정한 것이다. N-여왕말 문제를 백트래킹 기법으로 풀어 몬테칼로 추정값을 구해보도록하자.


 소스





 결과



  1. 창연아 잘썻어 ~~
이 댓글을 비밀 댓글로

[알고리즘] hamiltonian (되추적)

Posted by 백창
2014.08.26 19:41 개발/C언어

 해밀튼의 회로 문제




 소스






 정답


 위 문제에 정답은 없다. 가 정답 

이 댓글을 비밀 댓글로