일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Spring MSA
- 인텔리j
- Microservice
- @DeleteMapping
- FTP
- Java
- 마스터링 스프링 클라우드
- @RequestMapping
- 인텔리제이
- 업로드
- @PostMapping
- @PatchMapping
- 파일업로드
- MSA
- 클라우드 네이티브 자바
- 마이크로서비스
- spring
- sftp
- @PutMapping
- @GetMapping
- IntelliJ
- Today
- Total
zerofunc
프로젝트 1- 푸쉬푸쉬게임 본문
이 프로젝트를 시작으로 내가 했었던
큰 프로젝트들을 올릴것이다.
이 프로젝트는 바로 어렸을때 아빠, 엄마 폰으로하던 추억의 '푸쉬푸쉬' 게임이다!
이걸 만들게 된 이유는 기능반 때문인데
기능반에서 1차를 떨어졌지만 2차과제로 하루만에 푸쉬푸쉬 게임을 만드는 것이었다.
이걸 만드느라 12시간 동안 코딩해서 허리가 뿌러질뻔했다.
다행히 2차를 합격해서 지금은 기능반에서 코딩을하며 노예로 지내는중이다 ^오^
시작전
* 알아야할것
enum, 함수, 매크로 함수, 전역변수 - 지역변수의 개념, API함수, 이중배열
#pragma once
#include <stdio.h>
#include <conio.h>
#include <Windows.h>
#include <time.h>
#define ESC 27
#define LEFT 75
#define RIGHT 77
#define UP 72
#define DOWN 80
enum {//색깔의 상수화
BLACK,
D_BLUE,
D_GREEN,
D_SKYBLUE,
D_RED,
D_VIOLET,
D_YELLOW,
GRAY,
D_GRAY,
BLUE,
GREEN,
SKYBLUE,
RED,
VIOLET,
YELLOW,
WHITE,
};
//전역변수 선언
int g_PX,g_PY;//캐릭터위치
int g_step;//걸음
int g_push; //공움직인횟수
int g_Box;//박스안에넣은양
int Menu_Flag=1;
char map[14][20]= {//맵
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,2,0,0,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,0,0,2,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,0,0,2,0,2,0,1,1,1,1,1,1,1,1,1,1},
{1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,1,0,1,1,0,1,1,1,1,1,0,0,3,3,1},
{1,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,3,3,1},
{1,1,1,1,1,0,1,1,1,0,1,5,1,1,0,0,3,3,1},
{1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
};//맵
char r_map[14][20]={};
//함수선언
void SetColor(int,int); //색표현
void SetCursor(bool); //커서 표시
void gotoxy(int,int);//좌표이동
void Map();//맵
void PlayerEraser();//플레이어 지우기
void PlayerDraw();//플레이어 그리기
void PlayerAction();//플레이어 이동
void MapDraw(int,int);//맵 그리기
void ClearMessage();//게임 끝
int StageClearCheck(void);//스테이지 끝났는지 체크
void BarDraw();// 메뉴바
void INTRO();//인트로 화면
void Copy();//맵 복사
//main
void main(){
system("mode con: cols=70 lines=22"); //콘솔창크기
SetCursor(false);
Copy();
while(1){
if(Menu_Flag) {INTRO();};
PlayerAction();
BarDraw();
if(StageClearCheck()){
ClearMessage();
}
}
}
//함수정의
void SetColor(int color , int bgcolor ) //텍스트 색깔 바꾸는 함수
{
color &= 0xf;
bgcolor &= 0xf ;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), (bgcolor << 4) | color );
}
void SetCursor(bool bVisible) //커서를 숨기거나 보여주는 함수
{
CONSOLE_CURSOR_INFO ConsoleCursor;
ConsoleCursor.bVisible = bVisible // true 보임, false 안보임
ConsoleCursor.dwSize = 1; // 커서사이즈
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE) , &ConsoleCursor); // 설정
}
void gotoxy(int x,int y){//커서위치
COORD Cur;
Cur .X=x*2;//가로 두배
Cur .Y=y
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),Cur);
}
void Copy(){ //맵복사
int x,y;
for(y=0;y<14;y++){
for(x=0;x<20;x++){
r_map[y][x] = map[y][x];
}
}
}
void INTRO(){
int x=12,y=3;
g_PX=11,g_PY=10;//캐릭터위치
g_step=0;//걸음
g_push=0; //공움직인횟수
g_Box=0;//박스안에넣은양
int x_,y_; //맵초기화
for(y_=0;y_<14;y_++){
for(x_=0;x_<20;x_++){
map[y_][x_] = r_map[y_][x_];
}
}
system("cls");
SetColor(YELLOW,0);
gotoxy(x,y);printf("┌─────────┐");
gotoxy(x,y+1); printf("│ P U S H P U S H │");
gotoxy(x,y+2); printf("└─────────┘");
SetColor(BLUE,0);
gotoxy(x,y+15);
printf("Welcome to PUSH PUSH !!");
SetColor(15,0);
gotoxy(x+2,y+16);
printf("Press And Key...");
getch();
system("cls");
Menu_Flag=0;
PlayerDraw();
Map();
}
void BarDraw(){
int x =23;
int y =0;
SetColor(YELLOW,0);
gotoxy(x,y);printf("┌────────┐");
gotoxy(x,y+1); printf("│ P U S H P U S H│");
gotoxy(x,y+2); printf("└────────┘");
SetColor(YELLOW,0);
gotoxy(x, 6); printf("M O V E : %d", g_step); //플레이어 움직인 횟수
gotoxy(x, 7); printf("P U S H : %d", g_push); //박스 움직인 횟수
gotoxy(x,8); printf("C L E A R : %d",g_Box);
SetColor(10,0);
gotoxy(x, 13); puts("↑ : UP");
gotoxy(x, 14); puts("↓ : DOWN");
gotoxy(x, 15); puts("← : LEFT"); //각종 키 설명
gotoxy(x, 16); puts("→ : RIGHT");
gotoxy(x, 17); puts("ESC : MENU");
}
void Map(){
int x,y;
//플레이어 시작위치 10,11
for(y=0;y<14;y++){
for(x=0;x<20;x++){
gotoxy(x,y);
MapDraw(x,y);
}
}
}
int StageClearCheck(void) //스테이지 클리어 확인
{
if(g_Box==6)
return 1;
else
return 0;
}
void ClearMessage(){ //게임클리어시
char ch;
SetColor(YELLOW,0);
gotoxy(2,10);
Sleep(15);
printf(" S");
Sleep(15);
SetColor(rand()%14+1,0);
printf(" T");
Sleep(15);
SetColor(rand()%14+1,0);
printf(" A");
Sleep(15);
SetColor(rand()%14+1,0);
printf(" G");
Sleep(15);
SetColor(rand()%14+1,0);
printf(" E");
Sleep(15);
SetColor(rand()%14+1,0);
printf(" C");
Sleep(15);
SetColor(rand()%14+1,0);
printf(" L");
Sleep(15);
SetColor(rand()%14+1,0);
printf(" E");
Sleep(15);
SetColor(rand()%14+1,0);
printf(" A");
Sleep(15);
SetColor(rand()%14+1,0);
printf(" R");
Sleep(15);
printf(" !");
Sleep(50);
gotoxy(1,19);
printf("게임을 종료하시겠습니까? (y/n)");
ch=getch();
switch (ch)
{
case 'y' :
exit(0);
break
case 'n' :
Menu_Flag=1;
break
default:
break
}
getch();
}
void MapDraw(int x, int y){ //맵그리기
char data;
data = map[y][x];
switch(data){
case 0://0빈칸 1벽 2공 3목표 4채워진목표
SetColor(BLACK,0);
printf(" ");
break
case 1 :
SetColor(D_SKYBLUE,0);
printf("▦");
break
case 2:
SetColor(GREEN,0);
printf("※");
break
case 3:
SetColor(YELLOW,0);
printf("○");
break
case 4:
SetColor(GREEN,0);
printf("●");
default:
break
}
}
void PlayerDraw(){//플레이어 그리기
gotoxy(g_PX,g_PY);
SetColor(RED,0);
printf("★");
}
void PlayerEraser(){ //플레이어 흔적지우기
gotoxy(g_PX,g_PY);
printf(" ");
}
void PlayerAction(){ //플레이어의 움직임을 계산하는 함수
int dx=0, dy=0;
bool tab_block=false
char dir;
if(kbhit()){
dir=getch();
switch (dir)
{
case ESC :
system("cls");
Menu_Flag=1; //메뉴로감
break
case LEFT :
dx--;
break
case RIGHT :
dx++;
break
case UP :
dy--;
break
case DOWN :
dy++;
break
default :
break
}
if(map[g_PY+dy][g_PX+dx]!=1 ){//앞이벽이아니고
if(map[g_PY+dy][g_PX+dx]==2){//앞이공일때
if(map[g_PY+dy*2][g_PX+dx*2] ==0 || map[g_PY+dy*2][g_PX+dx*2] ==3){ // 빈곳이거나 빈목표일때
//앞앞에 공을 만듬
if(map[g_PY+dy*2][g_PX+dx*2]==3){ //앞이 공이고 앞앞이 목표일땐
map[g_PY+dy*2][g_PX+dx*2]=4;//앞앞에 채워진목표를그리고
g_Box++;
map[g_PY + dy][g_PX + dx] = 0;//앞에 빈칸을그린다
}
else{//앞이 공이고 앞앞이 빈곳일때
map[g_PY + dy*2][g_PX + dx*2] = 2;//앞앞에 고을그리고
map[g_PY + dy][g_PX + dx] = 0;//앞은 빈칸
}
g_push++;
}
else return
}
else if(map[g_PY+dy][g_PX+dx]==4){ //앞이 체워진목표이고
if (map[g_PY + dy*2][g_PX + dx*2] == 0){//앞앞이빈곳일때;
map[g_PY + dy*2][g_PX + dx*2] = 2;//앞앞에 공을두고
map[g_PY + dy][g_PX + dx] = 3;//앞에 목표를둔다
}
else if(map[g_PY + dy*2][g_PX + dx*2]==3){ //앞앞이목표일때
map[g_PY + dy*2][g_PX + dx*2] = 4;//앞앞에 채워진목표를두고
map[g_PY + dy][g_PX + dx] = 3;//앞은 목표를둔다
}
else return
g_push++;
}
Map();//맵을 다시그림
PlayerEraser();
if(dx||dy){
g_step++; //걸음수
g_PX += dx; //이동
g_PY += dy;}
PlayerDraw();
}
else {
if(map[g_PY + dy][g_PX + dx]!=2){//벽이면 리턴
}
return
}
}
}
한번한번 프로젝트를 할때마다 느끼는 거지만 아직 배울것도 많다는 것과
오류 하나하나 고칠때마다 실력이 쌓이는걸 몸으로 느끼고
나도 이런걸 할수 있구나 하고 자신감이 생긴다.
이번 프로젝트를 시작으로 점점 큰 프로젝트들을 진행할 예정이다
'IT > 프로젝트' 카테고리의 다른 글
프로젝트 3 - 공튀기기 (0) | 2013.11.30 |
---|---|
프로젝트 2 - 도서목록 (0) | 2013.11.30 |