컴공러가심심해서만든2048게임C코드
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
void plus(int (*plate)[4], char *input) // 이동 시 서로 붙어 있는 수가 있으면 서로 더해주기 위한 함수
{
int i, j;
if((*input=='w')||(*input=='W')) // 위로 몰아넣으므로, 맨 위에 붙어있는 수들부터 차례대로 더한다.
for(i=0; i<3; i++)
{
{
for(j=0; j<4; j++)
{
if(plate[i][j]==plate[i+1][j])
{
plate[i][j]*=2;
plate[i+1][j]=0;
}
}
}
}
else if((*input=='s')||(*input=='S')) // 아래로 몰아넣으므로, 맨 아래에 붙어있는 수들끼리 차례대로 더한다.
for(i=3; i>0; i--)
{
{
for(j=3; j>=0; j--)
{
if(plate[i][j]==plate[i-1][j])
{
plate[i][j]*=2;
plate[i-1][j]=0;
}
}
}
}
else if((*input=='a')||(*input=='A')) // 원리는 같다.
for(j=0; j<3; j++)
{
{
for(i=0; i<4; i++)
{
if(plate[i][j]==plate[i][j+1])
{
plate[i][j]*=2;
plate[i][j+1]=0;
}
}
}
}
else if((*input=='d')||(*input=='D')) // 원리는 같다.
for(j=3; j>0; j--)
{
{
for(i=3; i>=0; i--)
{
if(plate[i][j]==plate[i][j-1])
{
plate[i][j]*=2;
plate[i][j-1]=0;
}
}
}
}
}
void move(int (*plate)[4], char *input) // 이동 방향으로 수들을 모조리 몰아넣기 위한 함수
{
int i, j, k;
if((*input=='w')||(*input=='W'))
for(k=0; k<10; k++) // 충분히 여러번 반복해서 완전히 몰아넣게 하기 위함
for(i=0; i<3; i++)
{
{
for(j=0; j<4; j++)
{
if(plate[i][j]==0)
{
plate[i][j]=plate[i+1][j];
plate[i+1][j]=0;
}
}
}
}
else if((*input=='s')||(*input=='S'))
for(k=0; k<10; k++)
for(i=3; i>0; i--)
{
{
for(j=3; j>=0; j--)
{
if(plate[i][j]==0)
{
plate[i][j]=plate[i-1][j];
plate[i-1][j]=0;
}
}
}
}
else if((*input=='a')||(*input=='A'))
for(k=0; k<10; k++)
for(j=0; j<3; j++)
{
{
for(i=0; i<4; i++)
{
if(plate[i][j]==0)
{
plate[i][j]=plate[i][j+1];
plate[i][j+1]=0;
}
}
}
}
else if((*input=='d')||(*input=='D'))
for(k=0; k<10; k++)
for(j=3; j>0; j--)
{
{
for(i=3; i>=0; i--)
{
if(plate[i][j]==0)
{
plate[i][j]=plate[i][j-1];
plate[i][j-1]=0;
}
}
}
}
}
void main()
{
int plate[4][4]={0};
int before[4][4]={0};
int i, j, width, vertical, count=0, first=0, finish=0;
char input;
srand((unsigned)time(NULL));
width=rand()%4;
vertical=rand()%4;
printf("Welcome to the 2048 game.\n\n");
printf("coded by 김성보\n\n");
printf("w : up, s : down, a : left, d : right, b : back\n\n");
printf("Please press any key to start\n\n\n");
scanf("%c", &input);
fflush(stdin);
system("cls");
restart:
for(i=0; i<4; i++)
for(j=0; j<4; j++)
plate[i][j] = 0;
plate[width][vertical]=2; // 맨 처음 시작할 때 아무 칸에서나 랜덤하게 2가 생겨나게 하기 위함
while(1)
{
for(i=0; i<4; i++)
{
for(j=0; j<4; j++)
{
if(plate[i][j]!=0)
{
printf("[%5d]", plate[i][j]);
}
else
printf("[ ]");
}
printf("\n\n\n\n\n");
}
input = getch();
fflush(stdin);
system("cls");
for(i=0; i<3; i++)
{
for(j=0; j<=3; j++)
{
if(plate[i][j]==plate[i+1][j]) // 세로로 같은 숫자가 서로 붙어있는 경우가 하나라도 있으면 finish=1
finish=1;
}
}
for(j=0; j<3; j++)
{
for(i=0; i<=3; i++)
{
if(plate[i][j]==plate[i][j+1]) // 가로로 같은 숫자가 서로 붙어있는 경우가 하나라도 있으면 finish=1
finish=1;
}
}
for(i=0; i<4; i++)
{
for(j=0; j<4; j++)
{
if(plate[i][j]==0) // 한 칸이라도 비어있으면 finish=1
finish=1;
}
}
if(finish==0) // 같은 숫자가 서로 붙어있는 경우가 아얘 없거나, 비어있는 칸도 없어서 더 이상의 게임 진행이 불가능한 경우
break;
finish=0;
if(input=='w'||input=='W'||input=='a'||input=='A'||input=='s'||input=='S'||input=='d'||input=='D')
{
count=0;
first=1;
for(i=0; i<4; i++)
{
for(j=0; j<4; j++)
{
before[i][j]=plate[i][j];
}
}
move(plate, &input);
plus(plate, &input);
move(plate, &input);
for(i=0; i<4; i++)
{
for(j=0; j<4; j++)
{
if(before[i][j]!=plate[i][j]) // 바로 전의 칸과 현재의 칸이 완벽히 같은지를 구별하기 위함
count=1;
}
}
if(count==0)
goto end;
width=rand()%4;
vertical=rand()%4;
for(i=0; i<4; i++)
{
for(j=0; j<4; j++)
{
if(plate[i][j]==0)
count=1;
}
}
if(count==1)
while(1)
{
if(plate[width][vertical]==0)
{
plate[width][vertical]=2;
break;
}
width=rand()%4;
vertical=rand()%4;
}
end:
count=0;
}
else if(input=='b'||input=='B')
{
if(first==0)
printf("맨 처음에는 뒤로 갈 수 없습니다!\n\n");
else if(count!=1)
for(i=0; i<4; i++)
{
for(j=0; j<4; j++)
{
plate[i][j]=before[i][j];
before[i][j]=0;
}
}
else
printf("뒤로가기는 바로 전의 상태로밖에 돌아갈 수 없습니다.\n\n");
count=1;
}
}
system("cls");
for(i=0; i<4; i++)
{
for(j=0; j<4; j++)
{
printf("[%5d]", plate[i][j]);
}
printf("\n\n\n\n\n");
}
printf("\n\nGAME OVER\n\n");
printf("r : restart, e : exit game");
scanf("%c", &input);
while(1)
{
if(input=='r'||input=='R')
{
system("cls");
goto restart;
}
else if(input=='e'||input=='E')
{
system("cls");
break;
}
}
}
// 진짜 과제하러 갈게요
0 XDK (+0)
유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.
-
이정환T 후기 0
이정환 선생님 현강 어떤가요? 꼭 알려주세요!!!!
-
커리 옆 괄호는 시작~종료월(月) 국어(원98 백100) 독서문학: 김민정...
-
유리한 것: 연대식 충북식 건글식 한림식 불리한 것: 설대식 중대식 백분위대식
-
시발시발점 0
하루에 theme 하나씩 나가는게 정속이에요? 보통 강의 3~4개정도
-
눈맞아서 증식했나 아까 길가다가 비둘기 보고 닭인줄 알았움 징그러워 으
-
설경제간다 6
고경호소인 메가진화함.
-
연대 조발 하라…
-
숭어회 맛있네 12
대방어만큼은 아닌데 그에 비해 슴슴하면서도 여전히 기름지고 쫄깃한 맛이 아주 좋네요
-
그 학교 제일 끝자락인데 붙이려고 쓰는거 아녜요? 안정으로 박는건가 아님 합격증만...
-
지1사탐 할빠엔 3
세지사탐 한다 ㅋㅋ 세지 해줘요 ㅠ
-
1번 2번 3번 옛날에 만든 가장 악명높은 대표 물2 자작 문제 삼총사입니다. 네,...
-
무물보... 14
... .... ....
-
사탐사탐이 더 쉽지않나 대학 가기 지1 3등급에서 1받기보다 사탐노베로 1받기가 더 쉽지않나요
-
어짜피 안돼서 걱정 안해도 됨 ㅋㅋ
-
언: 추정 어려움. 가채점 안 해서 표점 118인데 그럼 대략 78점이니까...
-
시발점 드랍해도 상관없나요..?
-
대치 프로세스 논술학원 다니려는대 어떤가요
-
보니까 강기원이 투표수 압도적이던데 수업이 그렇게 ㅅㅌㅊ임?
-
이게 맞는 페이스인 건가요 최저러고 언매미적물지에 3합 7이 목표에요
-
한석원 선생님 교재 4의 규칙 개정 많이 되나요??? 3
보니깐 2025버전이 있네요 개정 많이 되나요??? 더불어 4점기출은 어떤가요???...
-
중앙대 경제갈게
-
백분위100인데 인생참 어렵다 그쵸..
-
??
-
강기원하고 박종민 고민임
-
진짜 좆됐어
-
대학 알리미로 취합한 서담 내부 데이터라 외부로 구체적인 수치는 못 까는데 이공계...
-
오개념 논란 그런 거 다 빼고 사문은 고정이고 생윤 vs 지구 고민중임 작수 지구...
-
아쉽네요
-
빨리 결과 보고 맘 좀 놓고 싶네요
-
ㄲㅂ
-
재수로 러셀 여자 기숙다녔던 사람임. 미적 박주혁T (미적은 다른 쌤들도 다 좋다고...
-
좀만잘볼껄 진짜조금만……………
-
생명은 어찌저찌 2등급 까지는 받을만하다는 말이 있다...
-
ㅎㅇ 11
-
얘를 상향이중모음으로 보든 하향이중모음으로 보든 문제가 해결이 안 됨 학교문법에서는...
-
요즘 상대편에서 자꾸 컴플레인 걸고 기분 꿀꿀하던데 전화위복 기회 생겼네 개꿀~ ㅋㅋㅋ
-
고3과외하고싶다 4
ㄹㅇ수학점수 올려줄수있는데...
-
근데 본인 미필이고 지금은 여친도 없음 뭐지 공부하다 미쳤나
-
풀어보셨던 수학문제집중 좋았던거 뭐 있으신가요??? 10
뭐가 좋으셨나요???
-
박광일T 커리 2
훈련도감2.0만 듣고 빠질까요? 문학 풀이 틀만 잡고 싶은데
-
엄마차 끌고 자취방 왕복하니까 레전드로 피곤함…
-
생각해보니까 내가 아프다고 집어준데에다가는 안하고 지맘대로 엉뚱한데에다가 함......
-
생명 2 2
생1에서 2등급 받을라면 유전 얼마나 해야됨? 이제 비유전 개념 끝났는데 유전 개무서움 그냥 무서움
-
어떠셨나요?
-
3강 합치면 269분이네 발췌수강 할까 걍..
-
저흰 1차합 중 77프로 찼네요..
-
님들 대학교 에타에도 13
성소수자게시판있음? 내가 다녔던 대학 에타에 성소수자게시판에서 사람 구해서 하더라 Oral같은거
-
+2천 찍어보네요 올해 무섭다
점수계산도 해주세요!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
후덜ㅠㅡㅜㅠ 뭉과인데 컴퓨터 배우고 싶네용ㅎㅎㄹ
왜 정보통신계열은 교차지원이 가능한가 궁금했었는데, 직접 배워보니 여태까지 배운 내용들은 전부 수1 개념이면 충분하더라구요 ㅋㅋ
우왕.. 꿈은 문과 분야에서 확고한 편이라 다음에 취미로 꼭 배워보려고요ㅎㅎ 수학은 그나마 희망적이네요..ㅋㅋㅋ간-단한 응용 프로그램 정도 손댈 수 있으려면 꽤 많이 공부해야 하려나요ㅎㅎ
네 ㅋㅋ 보통사람들이 인식하는 '프로그램'이라는 걸 만들려면 꽤 많이 이해하고 공부하고 연습해야해요 ㅎㅎ
제가 컴퓨터에 관심많아서 중학생때 혼자 c언어책 사서 따라하고 그랬는데
지금 독학재수생이거든요
재수목표가 고사국, 한양대 소프트, 성균관대 소프트 이 쪽을 목표로 했는데
만약 안된다면 컴공쪽도 생각하는데
컴퓨터공학과 하구 소프트웨어학과랑 배우는 과목이나 방향자체가 많이 다른가요?
제가 특히 보안쪽에 관심이 많거든요!!
일단 울학교 컴공과 소프트를 비교하자면, 배우는 과목의 차이가 거의 없습니다.
다만, 소프트는 장학금을 받으면서 기숙사 배정이 학점 기준 없이 바로 배정이 가능하고, 컴공보다는 조금 더 빨리 배우며, 방학 때 삼성에 불려가서 프로젝트 하면서 무언가 더 배우는게 있다고 합니다.
졸업한 뒤에 현업으로 뛰어들었을 때, 초기에는 소프트가 컴공보다는 더 적응력이 클 거 같네요 ㅋㅋ
실례지만, 서울이신가요? 수원이신가요? 제가 지원한 곳이라..
수학교육과, 컴퓨터교육과를 제외한 모든 자연계열 과는 수원에 있습니다
이과생인데 무슨 소리인지 모르겠다.
발 닦고 잠이나 자야겠다..
주무세요 ㅋㅋㅋ
오랜만에보네 샵인클루드 스트디오어이취
ㅋㅋㅋ