zerofunc

프로젝트 3 - 공튀기기 본문

IT/프로젝트

프로젝트 3 - 공튀기기

0penster 2013. 11. 30. 00:52

이번에 할 과제는 바로 공튀기기다

이것도 겜프 과제로 나온것인데,

리스트때문에 해메던 애들이 꽤 있었다.

나도 공넣는거는 쉬웠는데

공빼는거에서 좀 꼬여서 당황했었다.

리스트를 활용했기에

리스트를 먼저배우고 이글을 읽기를 바랍니다.

내가 이걸 했을때는

C++을 좀더 배웠을때라서

클래스로 게임을 구현해보았다.

#include "header.h"

#include <stdio.h>

#include <conio.h>

#include <iostream>

#include <stdlib.h>

#include <time.h>

using namespace std;

 //디파인으로  방향키값을 정의하고 콘솔창 사이즈를 설정한다

#define LEFT 75  

#define RIGHT 77

#define UP 72

#define DOWN 80

#define WINDOWSIZEX 35

#define WINDOWSIZEY 23

int iSpeed=50; //공 스피드

 

class Ball

{

private:

int m_iX; //좌표

int m_iY;

int m_iXSpeed; //스피드

int m_iYSpeed;

 

public:

int MX(){return m_iX;}  //X좌표리턴

int MY(){return m_iY;}  //Y좌표리턴

Ball()

{

m_iX=0;

m_iY=0;

m_iXSpeed=rand()%20; //공 속도랜덤

m_iYSpeed=rand()%20;

};

void move();

Ball *next;

};

void Ball::move()

{

m_iX += m_iXSpeed; //공 스피드만큼 좌표이동

m_iY += m_iYSpeed;

if(m_iX < 1) //공이 왼쪽에 닿으면

{

m_iXSpeed = 1;

m_iX = 0;

}

else if(33 <m_iX) //공이 오른쪽에닿으면

{

m_iXSpeed = -1;

m_iX = 33 ;

}

 

if(m_iY < 1) //공이 위쪽에 닿으면

{

m_iYSpeed = 1;

m_iY = 0;

}

else if(19 < m_iY) //공이 아래쪽에 닿으면

{

m_iYSpeed = -1;

m_iY = 19;

}

}

int *list[500];  //임시 방

Ball* CreateNode(int i) //공만들기 (리스트)

{

Ball *temp = new Ball;

temp->next = NULL;

 

list[i] = (int *)temp;

return temp;

}

void map()

{

gotoxy(0,22); //좌표이동

printf("───────────────────────────────────");

gotoxy(0,23);

printf("속도감소:속도증가:공추가:공빼기:"); //안내문

}

void Ballcnt(int cnt) //공의 갯수세기

{

gotoxy(26,23);

printf("공의갯수:%d",cnt);

}

void main()

{

SetConSize(WINDOWSIZEX,WINDOWSIZEY); //콘솔창 사이즈

Cursor(0);

static int cnt = 0; //공갯수 세기

static int bcnt =100; //공 최대갯수

Ball *Head, *curNode; //노드

char cmd; //입력

map();

while(1){

if(kbhit()){ //키가 눌렸을때

cmd=getch(); 

switch(cmd) //키값에따라

{

case LEFT: //공 속도 감소

if(iSpeed <100)

iSpeed++;

break

case RIGHT:

if(iSpeed > 10) //스피드가 10보다 클때만

iSpeed--;

break

case UP: //공갯수증가

cnt++;

if(cnt<bcnt-1) //100보다 작으면

{

if(cnt==1) //만약 첫번째꺼면

{

Head =CreateNode(cnt); //헤드를 만들어줌

curNode = Head;

}

else //그게 아니라면

{

curNode ->next = CreateNode(cnt); //링크드 리스트로 이어줌

curNode = curNode ->next;

}

}

else cnt--;

 

break

case DOWN: //공제거

if(cnt<=1)

break

for(int i=cnt;i >cnt-1;i--) //맨뒤부터 삭제

{

curNode = (Ball *)list[i];

gotoxy(curNode->MX(),curNode->MY());

cout<<" "

list[i]= NULL;

}

cnt--;

curNode = (Ball *)list[cnt]; //삭제한 노드 바로앞

break

default:

break

}

}

for(int i=1;i<=cnt;i++) //공을 그림

{

curNode = (Ball *)list[i];

gotoxy(curNode->MX(),curNode->MY());

cout<<" "

curNode->move();

gotoxy(curNode->MX(),curNode->MY());

SetTextColor(rand()%15);

cout<<""

}

Sleep(iSpeed);

 

}

}

'IT > 프로젝트' 카테고리의 다른 글

프로젝트 2 - 도서목록  (0) 2013.11.30
프로젝트 1- 푸쉬푸쉬게임  (0) 2013.11.30
Comments