# data[].attributes.body
우리 조는 챗봇 이라는 인공지능 채팅 로봇 시스템을 구현했다. 나는 거기서 구현 과정에서의 결함이 있는지를 검토하고, 이를 토대로 만들어진 챗봇을 발표하는 역할을 했다. 이런 활동은 처음 해봐서인지 어색하고 힘들었지만, 모든 조원들이 힘을 합쳐 열심히 활동을 하니 보람차기도 했다. 또한, 나는 활동 과정에서 열심히 임하면서 활기찬 분위기를 조성한 지성이를 칭찬하고 싶다.

# data[].attributes.body
게임이 제대로 잘 작동하는 것에서 흥미를 느꼈다. 코딩에 대해 더 자세히 설명받고 활동하는 시간을 갖고 싶다.

# data[].attributes.body
예다움제 속 코딩동아리 활동을 해봤는데 우리들이 계획하고 준비한 챗봇이 쓰이지 않아 아쉽긴 했지만 우리들끼리 준비하고 만든데에 있어서 의의가 있는거 같아 보람차기도 했다. 우리조의 고찬이가 발표도 열심히 준비해와서 체계적이게 말하니 내가 다 자랑스러워서 고마웠다

# data[].attributes.body
많은 사람들이 오지는 않았지만 다른 학생들에게 코딩으로 만든 게임을 소개 시켜주면서 보람을 느꼈다

# data[].attributes.body
10503  권하일
코딩으로 평균 계산기를 제작해보았고 내가 예전에 하던 코딩이 훨씬 더 어려워지고 발전되었다는것을 느꼈다.

# data[].attributes.body
예다움제에서 피하기 게임의 코딩 존반을 맡았다. 그러나 준비한 코딩이 c++로 구현이 되지 않아 다른 게임을 사용해야했다. 추천으로는 김지호 학생을 추천한다. 그 이유는 끝까지 포기하지 않고 방법을 찾으려 하였기 때문이다.

# data[].attributes.headline
C1조 게임플레이 영상

# data[].attributes.subject
C1조 게임플레이 영상

# data[].attributes.body
완성본

# data[].attributes.attachment_link.readable_text
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <windows.h>



#define MAX_X 40
#define MAX_Y 20
#define LETTER_CNT 1024



struct Node{
 char ch;
 int x;
 int y;
 int flag;
 int life;
 int speed;
};



void mainMenu();
void levelSelectMenu();
int gameStart();

int randx(int x, int y);
void gotoxy(int x, int y);
void textcolor(int color_number);



void main()
{
 int select;
 int tmpScore = 0;
 int maxScore = 0;

 while(1)
 {
  system("cls");
  mainMenu();
  fflush(stdin); scanf("%d", &select);
  system("cls");

  switch(select)
  {
  case 1:
   tmpScore = gameStart();
   break;
  case 2:
   if(maxScore < tmpScore) maxScore = tmpScore;
   printf("â¤ íì¬ ìµê³  ì ìë %d ìëë¤ \n", maxScore);
   system("pause");
   break;
  case 0:
   return;
  default:
   break;
  }
 }
}



void mainMenu()
{
 textcolor(14);
 puts("âââââââââââââââââââ");
 puts("â    â¤â¤ ë¬¸ì í¼íê¸° ê²ì â¤â¤          â");
 puts("â                                                   â");
 puts("â          1. ê²ì ìì                        â");
 puts("â                                                   â");
 puts("â          2. ìµê³  ì ì                        â");
 puts("â                                                   â");
 puts("â          0. ì¢     ë£                          â");
 puts("â                                                   â");
 puts("âââââââââââââââââââ");
 printf(" Select > ");
}



void levelSelectMenu()
{
 textcolor(11);
 puts("ââââââââââââââââ");
 puts("â    â¤â¤ ëì´ë ì í â¤â¤        â");
 puts("â                                          â");
 puts("â        1. ì´     ê¸                   â");
 puts("â                                          â");
 puts("â        2. ì¤     ê¸                   â");
 puts("â                                          â");
 puts("â        3. ê³      ê¸                   â");
 puts("â                                          â");
 puts("â        0. ë©ì¸ ë©ë´                 â");
 puts("â                                          â");
 puts("ââââââââââââââââ");
 printf(" Select > ");
}



int gameStart()
{
 int select;
    struct Node letter[LETTER_CNT];
 int i;
 int randVar, speed1, speed2;
 char ch;
 int playerX = 0, playerY = MAX_Y;
 int score=0;

 while(1)
 {  
  levelSelectMenu();
  fflush(stdin); scanf("%d", &select);
  system("cls");

  if(select == 1) 
  {
   randVar = 20;
   speed1 = 10;
   speed2 = 20;
   break;
  }
  else if(select == 2)
  {
   randVar = 10;
   speed1 = 5;
   speed2 = 10;
   break;
  }
  else if(select == 3)
  {
   randVar = 5;
   speed1 = 2;
   speed2 = 5;
   break;
  }
  else if(select == 0) return 0;
  else     continue;
 }

 for(i=0; i<LETTER_CNT; i++) letter[i].flag = 0;


 while(1)
 {
  if(randx(0,randVar) == 0)
  {
   for(i=0; i<LETTER_CNT; i++)
   {
    if(letter[i].flag == 0)
    {
     letter[i].ch = randx(0,1)?randx('A','Z'):randx('a','z');
     letter[i].flag = 1;
     letter[i].x = randx(0, MAX_X);
     letter[i].y = 0;
     letter[i].life = randx(50, 200);
     letter[i].speed = randx(speed1, speed2); 
     break;
    }
   }
  }

  for(i=0; i<LETTER_CNT; i++)
  {
   if(letter[i].flag == 1)
   {
    if(--letter[i].life == 0)
    {
     letter[i].life = letter[i].speed;

     gotoxy(letter[i].x, letter[i].y);
     printf("%c", letter[i].ch);
     printf("\b ");
     
     gotoxy(letter[i].x, ++letter[i].y);
     printf("%c", letter[i].ch);

     if(letter[i].y == 20)
     {
      printf("\b ");
      letter[i].flag = 0;
      if(letter[i].x == playerX || letter[i].x == playerX+1)
      {
          gotoxy(2, 23);
          system("pause");
          return score;
      }
      else
      {
       score++;
       gotoxy(45, 5);
       printf("â¤ ì ì : %d ", score);
      }
     }
    }
   }
  }
  Sleep(5);

  gotoxy(playerX, playerY);
  printf("â³");

  if(kbhit())
  {
   ch = getch();
   switch(ch)
   {
   case 75:
    if(playerX > 1)
    {
     printf(" ");
     playerX--;
     gotoxy(playerX, playerY);
     printf("â³");
    }
    break;
   case 77:
    if(playerX < 40)
    {
     printf(" ");
     playerX++;
     gotoxy(playerX, playerY);
     printf("â³");
    }
    break;
   default:
    break;
   }    
  }
 }
}



int randx(int x, int y)
{
    static int flag = 0;
    int retVal;
    if(flag == 0)
    {
        srand(time(NULL));
        rand();rand();rand();rand();
        srand(rand());
        flag = 1;
    }
    retVal = rand() % (y-x+1) + x;
    return retVal;
}



void gotoxy(int x, int y)
{
     COORD cd;
     cd.X=x;
     cd.Y=y;
     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), cd);
}



void textcolor(int color_number)
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color_number);
}

# data[].attributes.body
10502 권민석

제가 만든 프로그램은 두명이서 누가 더 빨리 100번 키를 누르는지 대결하는 프로그램인데 키 입력을 전달받기 위해 conio 헤더에 있는 getch 함수를 사용했습니다

# data[].attributes.body
pip install pygame --pre

# data[].attributes.body
import pygame # 1. pygame 선언

pygame.init() # 2. pygame 초기화

# 3. pygame에 사용되는 전역변수 선언
WHITE = (255,255,255)
RED = (255,0,0)
GREEN = (0,255,0)
size = [400,400]
screen = pygame.display.set_mode(size)

done= False
clock= pygame.time.Clock()

block_position = [0, 0] # (y,x)

def draw_block(screen, color, position):
block = pygame.Rect((position[0] * 20, position[1] * 20),
(20, 20))
pygame.draw.rect(screen, color, block)

# 4. pygame 무한루프
def runGame():
global done

while not done:
clock.tick(10)
screen.fill(WHITE)

for event in pygame.event.get():
if event.type == pygame.QUIT:
done=True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
block_position[1] -= 1         # 블록의 y 좌표를 1 뺀다
elif event.key == pygame.K_DOWN:
block_position[1] += 1         # 블록의 y 좌표를 1 더한다
elif event.key == pygame.K_LEFT:
block_position[0] -= 1         # 블록의 x 좌표를 1 뺀다
elif event.key == pygame.K_RIGHT:
block_position[0] += 1         # 블록의 x 좌표를 1 더한다

draw_block(screen, GREEN, block_position)
pygame.display.update()

runGame()
pygame.quit()

# data[].attributes.body
//[C/C++ game] very simple google dinosaur. (by. BlockDMask)

//2019.12.03 (v2.0)점수 추가, 충돌처리 추가.

#include<stdio.h>

#include<windows.h>

#include<conio.h>

#include<time.h>

#define DINO_BOTTOM_Y 12

#define TREE_BOTTOM_Y 20

#define TREE_BOTTOM_X 45

//콘솔 창의 크기와 제목을 지정하는 함수

void SetConsoleView()

{

system("mode con:cols=100 lines=25");

system("title Google Dinosaurs. By BlockDMask.");

}

//커서의 위치를 x, y로 이동하는 함수

void GotoXY(int x, int y)

{

COORD Pos;

Pos.X = 2 * x;

# data[].attributes.attachment_link.readable_text
알파벳 피하기.

구조체 :

char ch; : 문자

int x; : x좌표  
    
int y; : y좌표   
  
int flag; : 0 = 화면에 없다, 1 = 화면에 있다 

int life; : 개별 문자의 초반 대기시간

int speed; : 개별 문자의 낙하속도

#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <windows.h>



#define MAX_X 40
#define MAX_Y 20
#define LETTER_CNT 1024



struct Node{
 char ch;
 int x;
 int y;
 int flag;
 int life;
 int speed;
};



void mainMenu();
void levelSelectMenu();
int gameStart();

int randx(int x, int y);
void gotoxy(int x, int y);
void textcolor(int color_number);


#maxscore 변수를 통해 이전에 기록되어있던 지금까지의 최고 점수를 알려준다.

void main()
{
 int select;
 int tmpScore = 0;
 int maxScore = 0;

 while(1)
 {
  system("cls");
  mainMenu();
  fflush(stdin); scanf("%d", &select);
  system("cls");

  switch(select)
  {
  case 1:
   tmpScore = gameStart();
   break;
  case 2:
   if(maxScore < tmpScore) maxScore = tmpScore;
   printf("▤ 현재 최고 점수는 %d 입니다 \n", maxScore);
   system("pause");
   break;
  case 0:
   return;
  default:
   break;
  }
 }
}


#숫자키를 이용한 게임 시작 및 종료, 최고점수 기록 보기

void mainMenu()
{
 textcolor(14);
 puts("┏━━━━━━━━━━━━━━━━━┓");
 puts("┃    ▤▤ 문자 피하기 게임 ▤▤          ┃");
 puts("┃                                                   ┃");
 puts("┃          1. 게임 시작                        ┃");
 puts("┃                                                   ┃");
 puts("┃          2. 최고 점수                        ┃");
 puts("┃                                                   ┃");
 puts("┃          0. 종     료                          ┃");
 puts("┃                                                   ┃");
 puts("┗━━━━━━━━━━━━━━━━━┛");
 printf(" Select > ");
}

#숫자키를 이용해 난이도를 변경(난이도에 따라 전체 문자의 발생 빈도와 속도가 달라진다.(밑에 있는 speed값에 따라 달라짐을 확인 가능함))


void levelSelectMenu()
{
 textcolor(11);
 puts("┏━━━━━━━━━━━━━━┓");
 puts("┃    ▤▤ 난이도 선택 ▤▤        ┃");
 puts("┃                                          ┃");
 puts("┃        1. 초     급                   ┃");
 puts("┃                                          ┃");
 puts("┃        2. 중     급                   ┃");
 puts("┃                                          ┃");
 puts("┃        3. 고     급                   ┃");
 puts("┃                                          ┃");
 puts("┃        0. 메인 메뉴                 ┃");
 puts("┃                                          ┃");
 puts("┗━━━━━━━━━━━━━━┛");
 printf(" Select > ");
}


#위 난이도가 설정되면 구조체와 변수의 초기 설정값을 지정한다. (flag는 0으로 초기화되며, 무한 루프를 실행해 문자의 발생 빈도가 0이 될 때까지 루프를 돌게 되며 발생 빈도의 경우의 수가 0이 되면 전체 문자에 대해 flag가 0인 경우 ch에 임의의 문자(A~Z,a~z)를 넣고 flag는 1로 변경된다.)


#x좌표는 0에서 MAX_X(40) 사이의 임의의 값, y좌표는 0이 되며, life는 50에서 200사이의 임의의 값으로 설정된다. speed는 난이도에서 선택한 speed1과 speed2의 설정값 사이의 값 중 하나로 세팅된다.

​
int gameStart()
{
 int select;
    struct Node letter[LETTER_CNT];
 int i;
 int randVar, speed1, speed2;
 char ch;
 int playerX = 0, playerY = MAX_Y;
 int score=0;

 while(1)
 {  
  levelSelectMenu();
  fflush(stdin); scanf("%d", &select);
  system("cls");

  if(select == 1) 
  {
   randVar = 20;
   speed1 = 10;
   speed2 = 20;
   break;
  }
  else if(select == 2)
  {
   randVar = 10;
   speed1 = 5;
   speed2 = 10;
   break;
  }
  else if(select == 3)
  {
   randVar = 5;
   speed1 = 2;
   speed2 = 5;
   break;
  }
  else if(select == 0) return 0;
  else     continue;
 }

 for(i=0; i<LETTER_CNT; i++) letter[i].flag = 0;

#이후에 전체 문자에 대해서 flag값이 1이 된 경우 life 값이 0이 될 때까지 무한 루프에서 다음 차례가 올 때까지 대기한다. 이후 life 값이 0이 되면 개별 문자는 life에 자신의 개별 speed 값은 넣고 y좌표로 한 칸 이동 후 무한 루프 내에서 다시 자신의 다음 차례가 될 때까지 대기한다. 위와 같은 반복적 과정을 거친 후 y좌표 20지점에서 player의 x좌표와 문자의 x좌표 혹은 x+1좌표의 위치가 같을 경우 게임은 종료된다.

 while(1)
 {
  if(randx(0,randVar) == 0)
  {
   for(i=0; i<LETTER_CNT; i++)
   {
    if(letter[i].flag == 0)
    {
     letter[i].ch = randx(0,1)?randx('A','Z'):randx('a','z');
     letter[i].flag = 1;
     letter[i].x = randx(0, MAX_X);
     letter[i].y = 0;
     letter[i].life = randx(50, 200);
     letter[i].speed = randx(speed1, speed2); 
     break;
    }
   }
  }

  for(i=0; i<LETTER_CNT; i++)
  {
   if(letter[i].flag == 1)
   {
    if(--letter[i].life == 0)
    {
     letter[i].life = letter[i].speed;

     gotoxy(letter[i].x, letter[i].y);
     printf("%c", letter[i].ch);
     printf("\b ");
     
     gotoxy(letter[i].x, ++letter[i].y);
     printf("%c", letter[i].ch);

     if(letter[i].y == 20)
     {
      printf("\b ");
      letter[i].flag = 0;
      if(letter[i].x == playerX || letter[i].x == playerX+1)
      {
          gotoxy(2, 23);
          system("pause");
          return score;
      }
      else
      {
       score++;
       gotoxy(45, 5);
       printf("▤ 점수 : %d ", score);
      }
     }
    }
   }
  }
  Sleep(5);

  gotoxy(playerX, playerY);
  printf("△");

  if(kbhit())
  {
   ch = getch();
   switch(ch)
   {
   case 75:
    if(playerX > 1)
    {
     printf(" ");
     playerX--;
     gotoxy(playerX, playerY);
     printf("△");
    }
    break;
   case 77:
    if(playerX < 40)
    {
     printf(" ");
     playerX++;
     gotoxy(playerX, playerY);
     printf("△");
    }
    break;
   default:
    break;
   }    
  }
 }
}



int randx(int x, int y)
{
    static int flag = 0;
    int retVal;
    if(flag == 0)
    {
        srand(time(NULL));
        rand();rand();rand();rand();
        srand(rand());
        flag = 1;
    }
    retVal = rand() % (y-x+1) + x;
    return retVal;
}



void gotoxy(int x, int y)
{
     COORD cd;
     cd.X=x;
     cd.Y=y;
     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), cd);
}



void textcolor(int color_number)
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color_number);
}


#⚠무한 루프가 실행되고 있는 상황에서 player의 키 입력 여부를 체크하기 위해 kbhit() 함수를 사용함.

#키 입력이 있을 경우 좌우 방향 키값을 체크해서 △를 좌우로 이동하게 된다.

# data[].attributes.attachment_link.readable_text
entetainment: 오락물
nail-biting: 조마조마하게
committed: 전념하는
a host of: 많은
spontaneous: 임의의
determine: 단정하다
participate in: 에 참여하다
iet go of: 을 떨쳐버리다
challenge: 도전
script: 각본
close: 우열을 가리기 힘든
pysically: 실제로
flaw: 결점
perspective: 관점
point of view: 관점
go for: 에 해당되다
upside down: 거꾸로
right side uo: 똑바로
stuff: 물건
reflection: 심사숙고
expose: 드러내다
flip: 홱 뒤집다
likewise: 마찬가지로
altered: 변화된
dominan: 우세함
dominanc: 우세
that is: 즉
somewha: 다소
particular: 특정한
clear-cut: 명백한
indicate: 나타내다
in charge: 담당하는
electrically: 전기로
evidence: 증거
account for: 의 비율을 차지하다
hemisphere: 반구
brain wave: 뇌파
rely on: 에 의존하다
suggest: 암시하다
vary: 다양하다
recessive: 열성의

# data[].attributes.attachment_link.readable_text
# 이제 단어 암기를 위해서 학생들을 퀴즈해주는 프로그램을 만들고 싶습니다. vocabulary.txt의 첫 줄부터, 콘솔에 한국어 뜻을 알려주면 학생이 영어 단어를 입력하는 방식입니다. 맞는 답이 나오면 맞았습니다!가 출력되고 틀린 답이 나오면 아쉽습니다. 정답은 OOO입니다. 형식으로 나옵니다.
dic = open("vocabulary.txt", "r", encoding="utf-8")
box = []
for i in dic:
    box.append(i)
#print(box)
    word = i.strip().split(": ")
    korean = word[0]
    english = word[1]
    #print(word)
    #print(korean, english)
# txt 파일 밑에서 2줄 이상이 공백이 생기면 IndexError: list index out of range 에러 발생
    x = 0
    while True:
        question = input("%s: " % korean)
        answer = english
        if question == answer:
            print("맞았습니다!")
            break
        elif question != answer:
            print("아쉽습니다. 정답은 %s입니다." % answer)
            break
    x = x +1

# data[].attributes.attachment_link.readable_text
from random import randint

# 파일 열기
in_file = open('./vocabulary.txt', 'r', encoding='utf-8')

vocab = {}

for line in in_file:
    # 정보 정리
    data = line.strip().split(": ")
    english_word = data[0]
    korean_word = data[1]

    # 사전에 추가
    vocab[english_word] = korean_word
print(vocab)

while True:
    keys = list(vocab.keys())
    index = randint(0, len(keys) - 1)
    english_word = keys[index]
    korean_word = vocab[english_word]

    # 유저 입력값 받기
    guess = input("%s: " % korean_word)

    # 끝내기
    if guess == "q":
        break
    # 정답 확인
    if guess == english_word:
        print("정답입니다!\n")
    else:
        print("아쉽습니다. 정답은 %s입니다.\n" % english_word)


# 파일 닫기
in_file.close()

# data[].attributes.attachment_link.readable_text
from random import randint

# 파일 열기
in_file = open('./vocabulary.txt', 'r', encoding='utf-8')

vocab = {}

for line in in_file:
    # 정보 정리
    data = line.strip().split(": ")
    english_word = data[0]
    korean_word = data[1]

    # 사전에 추가
    vocab[english_word] = korean_word
print(vocab)

while True:
    keys = list(vocab.keys())
    index = randint(0, len(keys) - 1)
    english_word = keys[index]
    korean_word = vocab[english_word]

    # 유저 입력값 받기
    guess = input("%s: " % korean_word)

    # 끝내기
    if guess == "q":
        break
    # 정답 확인
    if guess == english_word:
        print("정답입니다!\n")
    else:
        print("아쉽습니다. 정답은 %s입니다.\n" % english_word)


# 파일 닫기
in_file.close()

# data[].attributes.attachment_link.readable_text
import pygame
import os
import sys
import random
import time

# ----- [게임창 초기 위치] -----

win_posx = 700
win_posy = 300
os.environ['SDL_VIDEO_WINDOW_POS'] = "%d,%d" % (win_posx, win_posy)

# ----- [윈도우창 설정] -----

WINDOW_WIDTH = 540
WINDOW_HEIGHT = 600
GRID = 30
GRID_WIDTH = int(WINDOW_WIDTH/GRID)
GRID_HEIGHT = int(WINDOW_HEIGHT/GRID)

# ===== [색상설정] =====

BLACK = 0, 0, 0
WHITE = 255,255,255
RED = 255, 0, 0
GREEN1 = 25, 102, 25
GREEN2 = 51, 204, 51
GREEN3 = 233, 249, 185
BLUE = 17, 17, 212
LIGHT_PINK1 = 255, 230, 255
LIGHT_PINK2 = 255, 204, 255

NORTH = ( 0, -1)
SOUTH = ( 0,  1)
WEST  = (-1,  0)
EAST  = ( 1,  0)

# ----- [스네이크 클래스] -----

class Snake:

    def __init__(self):
        self.length = 1
        self.create_snake()
        self.color1 = GREEN2
        self.color2 = GREEN3
        self.head_color = GREEN1

    def create_snake(self):
        self.length = 3
        self.positions = [(int(WINDOW_WIDTH/2), int(WINDOW_HEIGHT/2))]
        self.direction = random.choice([NORTH, SOUTH, WEST, EAST])
        global game_score
        game_score = 0

    def move_snake(self, surface):

        # print(len(self.positions))
        head = self.get_head_position()
        x, y = self.direction
        next = ((head[0] + (x*GRID)) % WINDOW_WIDTH, (head[1] + (y*GRID)) % WINDOW_HEIGHT)
        if next in self.positions[2:]:
            self.create_snake()
            gameover(surface)
        else:
            self.positions.insert(0, next)
            if len(self.positions) > self.length:
                del self.positions[-1]

    def draw_snake(self, surface):
        for index, pos in enumerate(self.positions):
            if index == 0:
                draw_object(surface, self.head_color, pos)
            elif index % 2 == 0:
                draw_object(surface, self.color1, pos)
            else:
                draw_object(surface, self.color2, pos)


    def game_control(self, arrowkey):
        if (arrowkey[0]*-1, arrowkey[1]*-1) == self.direction:
            return
        else:
            self.direction = arrowkey

    def get_head_position(self):
        return self.positions[0]

# ----- [ 먹이 클래스 ] -----

class Food:
    def __init__(self):
        self.position =(0, 0)
        self.color = RED
        self.randomize_food()

    def randomize_food(self):
        self.position = (random.randint(0, GRID_WIDTH-1) * GRID,
                         random.randint(0, GRID_HEIGHT-1) * GRID)

    def draw_food(self, surface):
        draw_object(surface, self.color, self.position)


# ----- [ 전역 ] -----

def draw_background(surface):
    background = pygame.Rect((0,0),(WINDOW_WIDTH, WINDOW_HEIGHT))
    pygame.draw.rect(surface, WHITE, background)
    draw_grid(surface)

def draw_grid(surface):
    for row in range(0,int(GRID_HEIGHT)):
        for col in range(0, int(GRID_WIDTH)):
            if (row+col) % 2 == 0:
                rect = pygame.Rect((col*GRID, row*GRID), (GRID, GRID))
                pygame.draw.rect(surface, LIGHT_PINK1, rect)
            else:
                rect = pygame.Rect((col*GRID, row*GRID), (GRID, GRID))
                pygame.draw.rect(surface, LIGHT_PINK2, rect)


def draw_object(surface, color, pos):
    rect = pygame.Rect((pos[0], pos[1]), (GRID,GRID))
    pygame.draw.rect(surface, color, rect)
    pygame.draw.rect(surface, WHITE, rect, 1)


def position_check(snake, food_group):
    for food in food_group:
        if snake.get_head_position() == food.position:
            global game_score
            game_score += 1
            snake.length += 1
            food.randomize_food()


def show_info(surface, snake, speed):
    font = pygame.font.SysFont('malgungothic',35)
    image = font.render(f' 점수 : {game_score} 길이: {snake.length} LV: {int(speed//2)} ', True, BLUE)
    pos = image.get_rect()
    pos.move_ip(20,20)
    pygame.draw.rect(image, BLACK,(pos.x-20, pos.y-20, pos.width, pos.height), 2)
    surface.blit(image, pos)

def gameover(surface):
    font = pygame.font.SysFont('malgungothic',50)
    image = font.render('GAME OVER', True, BLACK)
    pos = image.get_rect()
    pos.move_ip(120,220)
    surface.blit(image, pos)
    pygame.display.update()
    time.sleep(2)

player = Snake()
run = True
game_score = 0

# ----- [ 먹이 그룹 ] -----

def draw_food_group(food_group, surface):
    for food in food_group:
        food.draw_food(surface)

food = Food()
food_group = []

for i in range(3):
    food = Food()
    food_group.append(food)

for food in food_group:
    print(food.position)

# ----- [ game loop ] -----

pygame.init()
pygame.display.set_caption('SNAKE GAME')
screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
clock = pygame.time.Clock()

while run:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_q:
                run = False
            if event.key == pygame.K_UP:
                player.game_control(NORTH)
            if event.key == pygame.K_DOWN:
                player.game_control(SOUTH)
            if event.key == pygame.K_RIGHT:
                player.game_control(EAST)
            if event.key == pygame.K_LEFT:
                player.game_control(WEST)

    draw_background(screen)
    player.move_snake(screen)
    position_check(player, food_group)
    player.draw_snake(screen)
    draw_food_group(food_group, screen)
    # food.draw_food(screen)
    speed = player.length/2
    show_info(screen, player, speed)
    pygame.display.flip()
    pygame.display.update()
    clock.tick(5+speed)

# ----- [ 파이게임 종료 ] -----

print('pygame closed')
pygame.quit()
sys.exit()

# data[].attributes.body
#include <iostream>
#include <vector>
#include <conio.h>
#include <windows.h>
#include <cstdlib>
#include <ctime>
#include <algorithm>
using namespace std;
#define TABLE_X 20
#define TABLE_Y 38
#define LEFT 75
#define RIGHT 77
#define UP 72
#define DOWN 80
void CursorView(char show) {
HANDLE hConsole;
CONSOLE_CURSOR_INFO ConsoleCursor;
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
ConsoleCursor.bVisible = show;
ConsoleCursor.dwSize = 1;
SetConsoleCursorInfo(hConsole, &ConsoleCursor);
void gotoxy(int x, int y) {
COORD pos = { x,y };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}

# data[].attributes.attachment_link.title
제목을-입력해주세요_ (2)

# data[].attributes.headline
발표자료 - 코딩의 활용

# data[].attributes.subject
발표자료 - 코딩의 활용

# data[].attributes.body
12/28일 활동 후 작성바랍니다
<작성 시 유의사항>
1. 해당 모둠으로 가서 +누른 후 제목에 본인 학번과 이름쓸 것
2.내용 칸에 소감문 작성

<소감문에 반드시 들어갈 내용>
1. 예다움제에서 내가 맡은 역할
2. 내가 맡은 제작 부분에 대한 설명과 그에 대한 자기 평가(단순 소감 지양, 어떤 부분에서 잘했고 어떤 부분이 아쉬운지 구체적으로 작성바람)
3. 칭찬하고 싶은 동료(모둠원)와 그 이유
추가. 본인이 준비한 과정을 자료를 첨부하여 올려도 됨.

# data[].attributes.body
1. 친구들에게 코딩 설명
2. 체험 홍보
3. 게임 미리 설치
4. 게임 설명
5. 방명록 관리 (할까말까)

# data[].attributes.body
<발표 순서>

1. 파이썬 1모둠 : 10726 정원용 10433 조정흠 +

2. 파이썬 5모둠 : 10811 배호경 10622 이민석 10109 김재하 +

3. C언어 1모둠 : 11006 김지호, 10404 곽민재 10704 김륜건 10820 이서우 10816 윤건희

4. 파이썬 6모둠 : 10202 김석주 10226 이시현 10703 김도현

5. C언어 3모둠 : 11013 박진우 10914 이도엽 10613 김지호 +

6. 파이썬 3모둠 : 10301 김건우 10732 최고찬 10725 정원석 10205 김지성+

7. 파이썬 2모둠 ; 10713 박현준 11024 이정민 +

8. C언어 2모둠 : 10312 신진석, 10318 이민호 10721 장재웅 10706 김우철 10401 강민성 +

9. 파이썬 4모둠 : 10731 천현준 10333 허태영 10209 박민수+

10.C언어 4모둠 : 10502 권민석 10510 김태현 10503 권하일 10217 안정엽 10508 김지성

카톡 ID : ujeong110 //
E-mail : ujeong110@hanmail.net

<발표 방법>

1.자기 조 소개

2.프로젝트를 하게 된 계기

3.결과물 소개 (발표 내용, 주제 결과물의 작동 원리, 방식, 제작과정 등 소개)

4.발표 후 투표 : https://naver.me/xGibwS8U