일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 인텔리제이
- 업로드
- @PostMapping
- 마스터링 스프링 클라우드
- @GetMapping
- sftp
- @DeleteMapping
- spring
- MSA
- @PutMapping
- Spring MSA
- Java
- FTP
- 마이크로서비스
- 파일업로드
- IntelliJ
- 클라우드 네이티브 자바
- @RequestMapping
- @PatchMapping
- Microservice
- 인텔리j
- Today
- Total
zerofunc
프로젝트 3 - 공튀기기 본문
이번에 할 과제는 바로 공튀기기다
이것도 겜프 과제로 나온것인데,
리스트때문에 해메던 애들이 꽤 있었다.
나도 공넣는거는 쉬웠는데
공빼는거에서 좀 꼬여서 당황했었다.
리스트를 활용했기에
리스트를 먼저배우고 이글을 읽기를 바랍니다.
내가 이걸 했을때는
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 |