1대1 질문 부탁 드립니다.
-
게시물 수정 , 삭제는 로그인 필요
안녕하세요
여기서 질문 올렸던 사람입니다.
제가 한번 답변자님의 코드를 변경시켜봤습니다.
제가 해보고자하는것은 움직이는 별이 충돌하면 그 별은 벽에 붙은채로 고정시키고
다른 별을 소환하는것을해보려하다 안되서 질문 드립니다.
그리고 일단 네모부분을 1로 그리고 아닌빈공간은 0으로 했습니다. 2차원 배열에
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define DOWN 50 //아스키코드로 키보드2에 해당.
#define LEFT 52 //아스키코드로 키보드4에 해당.
#define RIGHT 54 //아스키코드로 키보드6에 해당.
#define UP 56 //아스키코드로 키보드8에 해당.
#define TRUE 1 //참값인 1을 매크로 상수 TRUE로 대체
#define FALSE 0 //거짓인 0을 매크로 상수 FALSE로 대체.
#define STARTX 0
#define STARTY 0
#define END 20
int x = 10;
int y = 10;
int array[END+1][END+2]; //실시간 현황을 위한 2차원배열
void set(int, int);
COORD get();
void map();
void show();
void del();
int control();
int up();
int down();
int left();
int right();
int IsColl();
void addstar();
void cement();
int main()
{
map(); // 별의 이동하는 제한범위
while (1) {
set(x, y); // 별의 이동의 시작점
show(); // 초기 위치로 별 출력.
while (1)
{
if (control() == -1) {
addstar();//만약 충돌하면 2차원 배열에 1값으로
//cement(); 만약 별을 굳어지게 하려면 이걸 해줘야 하나 궁금합니다.
break;
}
}
}
return 0;
}
void cement() {// 별을 굳어지게 하기 위한 함수
}
void addstar() {
COORD pos = get();
int a = pos.X;
int b = pos.Y;
if (a == STARTX) { // 왼쪽 충돌시
array[y][x] = 1;
array[y][x+1] = 1;
}
if (b == END) { //아래 충돌시
array[y][x] = 1;
array[y][x + 1] = 1;
}
if (a == END) { //오른쪽 충돌시
array[y][x] = 1;
array[y][x - 1] = 1;
}
if (b == STARTY) { //위쪽 충돌시
array[y][x] = 1;
array[y][x+1] = 1;
}
}
int IsColl()
{
set(0, 25);
if (x == STARTX) { // 왼쪽 충돌검사
printf("%-20s", "왼쪽벽과 충돌함");
return TRUE;
}
if (y == END) { //아래 충돌검사
printf("%-20s", "아래벽과 충돌함");
return TRUE;
}
if (x == END) { //오른쪽 충돌검사
printf("%-20s", "오른벽과 충돌함");
return TRUE;
}
if (y == STARTY) { //위쪽 충돌검사
printf("%-20s", "위벽과 충돌함");
return TRUE;
}
return FALSE;
}
int control() {
char ch;
int result = 0;
if (kbhit()) {//상하좌우 이동
ch = getch();
switch (ch) {
case UP:
result=up();
break;
case DOWN:
result = down();
break;
case LEFT:
result = left();
break;
case RIGHT:
result = right();
break;
case '0': //만약 0을 누르면 종료되게 추가했습니다.
exit(1);
}
}
return result;
}
int up()
{
del();
y -= 1;
if (IsColl())
{
y += 1;
return -1;
}
show();
}
int down()
{
del();
y += 1;
if (IsColl()) {
y -= 1;
return -1;
}
show();
}
int left()
{
del();
x -= 2;
if (IsColl()) {
x += 2;
return -1;
}
show();
}
int right()
{
del();
x += 2;
if (IsColl()) {
x -= 2;
return -1;
}
show();
}
void show()
{
set(x, y);
printf("★");
}
void del()
{
set(x, y);
printf(" ");
}
void map()
{
int i, j;
for (i = STARTX; i <= END; i++) {
set(i, STARTY);
printf("■");
array[i][STARTY] = 1;
}
for (i = STARTX; i <= END; i++) {
set(i, END);
printf("■");
array[i][END-1] = 1;
}
for (j = STARTY; j <= END; j++) {
set(END, j);
printf("■");
}
for (j = STARTY; j <= END; j++) {
set(STARTX, j);
printf("■");
}
for (j = STARTY; j < END-1; j++) {
array[STARTY][j] = 1;
}
for (j = STARTY; j < END-1; j++) {
array[END][j] = 1;
}
}
void set(int a, int b)
{
COORD pos = { a,b };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
COORD get()
{
int a, b;
CONSOLE_SCREEN_BUFFER_INFO cur;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cur);
a = cur.dwCursorPosition.X;
b = cur.dwCursorPosition.Y;
COORD pos = { a,b };
return pos;
}
그래서
질문은
void cement() {// 별을 굳어지게 하기 위한 함수
}
이함수를 어떻게 해줘야 별이 궅어질까요??
그리고 이건 다른질문이지만
제가 테트리스랑 지렁이 게임을 짜기위해 좌표에 익숙해지기 위한 연습을 하고 있습니다.
근데 테트리스 정도는 짤줄 알아야
왕초보에서 초보단계로 갈수 있나요?
그리고 초보에서 중수로 가려면 벽돌깨기내지는 겔러그 비슷한 슈팅게임정도는 만들고 자료구조정도는 할줄 아는단계 인가요???
#지식인 1대1 질문 #네이버 1대1 질문