프로젝트이름 원슨어택
게임이름 신의한수
위 둘의 차이는 나도 헷갈린다.
소스공개:
#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
#include<time.h>
#define true 1
#define false 0
using namespace std;
typedef struct set_field
{
int howin = -1;
//1없음,2플래이어,3컴퓨터
}SET;
typedef struct player
{
char name[100];
int HP=1;
int SP=0;
int defend = NULL;
int axis_x = NULL;
int axis_y = NULL;
int AI = NULL; // AI인경우 랜덤함수를 통해 이동과 공격을 설정한다.(1 이면 AI)
int action1[3];
int action2[3];
struct player* ptn;// 방어기제를 알기위한 유기적 관계 형성
}Player;
SET F[3][4];
Player A;
Player C;
void GUI_f(int x1, int y1, int x2, int y2);
void GUI_action(Player* dp,int i);
void GUI_act(Player *dp1, Player *dp2);
void GUI_p(Player *dp1, Player *dp2);
void end(void);
void select_action(Player *dp);
void main(void)
{
printf(" play game of 신의 한수(제작자:응컴 16 김도영) \n\n\n ");
there:
printf("골라! :: 1번 1인용, 2번 :2인용 3:설명\n" );
int sel = 0;
cin >> sel;
strcpy_s(A.name,100,"Player1");
A.axis_x = 1;
A.axis_y = 0;
A.ptn = &C;
if (sel == 1)
{
strcpy_s(C.name, 100, "alpha-GO");
C.axis_x = 1;
C.axis_y = 3;
C.AI = true;
C.ptn = &A;
}
else if(sel ==2)
{
strcpy_s(C.name, 100, "Player2");
C.axis_x = 1;
C.axis_y = 3;
C.AI = false;
C.ptn = &A;
}
else if (sel == 3)
{
printf("게임설명:\n턴제방식의 게임으로 3개의 행동을 고른다 .이동,공격,방어가 있다\n");
Sleep(2000);
printf("이동과 공격은 방향이 있다\n");
Sleep(2000);
printf("공격과 필살기는 방어가 가능하다\n");
Sleep(3000);
printf("방어에 성공하면 SP를 얻고 전범위 공격인 필살기를 사용할수 있다\n\n");
Sleep(1000);
printf("1P 아이콘 ■ ,2P or 알파고 아이콘 ▒ \n\n");
goto there;
}
else
{
cout << "다시골라!\n" << endl;
goto there;
}
GUI_f(A.axis_x, A.axis_y, C.axis_x, C.axis_y);
//---------------------------------------default-----------------//
while (1)
{
select_action(&A);
select_action(&C);
GUI_act(&A, &C);
}
//----------------------------------play-----------------------//
system("pause");
}
void GUI_f(int x1,int y1,int x2,int y2)
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
F[i][j].howin = 0;
}
} //필드 초기화
int cnt = 0;
F[x1][y1].howin = 1;
F[x2][y2].howin = 2;
if (F[x1][y1].howin == F[x2][y2].howin)
{
F[x2][y2].howin = 4;
}
Sleep(1000);
system("cls");
cout << endl << endl;
for (int i = 0; i < 3; i++)//□ ■ ▲
{
for (int j=0; j < 4; j++)
{
if (F[i][j].howin == 0) {
printf("□");
}
else if (F[i][j].howin == 1)
{
printf("■");
}
else if (F[i][j].howin == 2) {
printf("▒");
}
else if (F[x2][y2].howin == 4)
{
printf("▣");
}
cnt++;
if (cnt >= 4)
{
cnt = 0;
printf("\n");
}
}
}//필드별 위치 구현
}
void GUI_action(Player *dp,int i)
{
Sleep(1500);
if (dp->action1[i] == 1)
{
if (dp->action2[i] == 1)
{
if (dp->axis_y < 3) (dp->axis_y)++;
cout << dp->name << "이 ->으로 이동합니다" << endl;
}
else if (dp->action2[i] == 2)
{
if (dp->axis_x > 0) (dp->axis_x)--;
cout << dp->name << "이 위로 이동합니다" << endl;
}
else if (dp->action2[i] == 3)
{
if (dp->axis_y > 0) (dp->axis_y)--;
cout << dp->name << "이 <-로 이동합니다" << endl;
}
else if (dp->action2[i] == 4)
{
if (dp->axis_x < 2) (dp->axis_x)++;
cout << dp->name << "이 밑으로 이동합니다" << endl;
}
}
if (dp->action1[i] == 2)
{
if (dp->action2[i] == 1)
{
if ( (dp->axis_x)==(dp->ptn->axis_x) && (dp->axis_y + 1) == (dp->ptn->axis_y) )
{
if ((dp->ptn->defend) == false)
{
cout << "->방향 공격시도!" << endl;;
cout << "->방향 공격성공!" << endl;;
cout << dp->name << "이 승리했습니다!" << endl;
end();
}
else
{
cout << "->방향 공격시도!" << endl;;
cout << "상대가 방어에 성공하므로 상대는 SP를 획득하였습니다" << endl;
cout << "warning : 상대의 필살기에 대비하세요!!" << endl;
Sleep(1000);
(dp->ptn->SP)++;
}
}
else
{
cout << dp->name <<"-> 방향 공격실패!" << endl;
}
}
else if (dp->action2[i] == 2)
{
if ((dp->axis_y) == (dp->ptn->axis_y) && (dp->axis_x - 1) == (dp->ptn->axis_x))
{
if ((dp->ptn->defend) == false)
{
cout << "위쪽방향 공격시도!" << endl;;
cout << "위쪽방향 공격성공!" << endl;;
cout << dp->name << "이 승리했습니다!" << endl;
end();
}
else
{
cout << "위쪽방향 공격시도!" << endl;;
cout << "상대가 방어에 성공하므로 상대는 SP를 획득하였습니다" << endl;
cout << "warning : 상대의 필살기에 대비하세요!!" << endl;
Sleep(1000);
(dp->ptn->SP)++;
}
}
else
{
cout << dp->name << "위쪽 방향 공격실패!" << endl;
}
}
else if (dp->action2[i] == 3)
{
if ((dp->axis_x) == (dp->ptn->axis_x) && (dp->axis_y - 1) == (dp->ptn->axis_y))
{
if ((dp->ptn->defend) == false)
{
cout << "<-방 공격시도!" << endl;;
cout << "<-방 공격성공!" << endl;;
cout << dp->name << "이 승리했습니다!" << endl;
end();
}
else
{
cout << "<-방 공격시도!" << endl;;
cout << "상대가 방어에 성공하므로 상대는 SP를 획득하였습니다" << endl;
cout << "warning : 상대의 필살기에 대비하세요!!" << endl;
Sleep(1000);
(dp->ptn->SP)++;
}
}
else
{
cout << dp->name << "<- 방향 공격실패!" << endl;
}
}
else if (dp->action2[i] == 4)
{
if ((dp->axis_y) == (dp->ptn->axis_y) && (dp->axis_x + 1) == (dp->ptn->axis_x))
{
if ((dp->ptn->defend) == false)
{
cout << "아래방향 공격시도!" << endl;;
cout << "아래방향 공격성공!" << endl;;
cout << dp->name << "이 승리했습니다!" << endl;
end();
}
else
{
cout << "아래방향 공격시도!" << endl;;
cout << "상대가 방어에 성공하므로 상대는 SP를 획득하였습니다" << endl;
cout << "warning : 상대의 필살기에 대비하세요!!" << endl;
Sleep(1000);
(dp->ptn->SP)++;
}
}
else
{
cout << dp->name << "아래방향 공격실패!" << endl;
}
}
else
{
cout << "필살기 시전!!" << endl;
if(dp->ptn->defend == false)
{
cout << dp->name << "이승리하였습니다!" << endl;
cout << " 게임을 종료합니다" << endl;
end();
}
else
{
cout <<dp->ptn->name <<"가 필살기 방어에 성공하였습니다" << endl;
(dp->ptn->SP)++;
}
}
}
if (dp->action1[i] == 3)
{
cout << dp->name << "이";
cout << "방어를 시도합니다" << endl;
dp->defend = true;
}
GUI_f(A.axis_x, A.axis_y, C.axis_x, C.axis_y);
}
void GUI_act(Player *dp1, Player *dp2)
{
for (int i = 0; i < 3; i++)
{
GUI_action(dp1, i);
dp2->defend = false;//한턴이 지나면 방어모드 제거
GUI_action(dp2, i);
dp1->defend = false;
}
}
void GUI_p(Player *dp1,Player *dp2)
{
cout << endl;
cout << dp1->name << " ";
cout << dp2->name << endl;
cout << "HP:"; printf("♥");cout << " ";
cout << "HP:"; printf("♥"); cout << endl;
cout << "SP:" << dp1->SP << " ";;
cout << "SP:" << dp2->SP << endl;
}
void end(void)
{
printf("게임을 종료합니다\n");
Sleep(10000);
exit(0);
} //프로그램 종료 함수
void select_action(Player *dp)
{
int x; int y; int cnt=0;
cout << endl;
if (dp->AI == false)
{
for (int i = 0; i < 3; i++)
{
re:
GUI_p(&A, &C);
printf("<interface:%s>%d번행동\n",dp->name,i+1);
printf("1.이동\n");
printf("2.공격\n");
printf("3.방어\n");
printf("메뉴를 선택하시오:");
scanf_s("%d", &x);
if (x == 1)
{
printf("\n이동방향선택\n");
printf("1.→\n");
printf("2.↑\n");
printf("3.←\n");
printf("4.↓\n");
scanf_s("%d", &y);
}
else if (x == 2)
{
here:
printf("\n공격방향선택\n");
printf("1.→\n");
printf("2.↑\n");
printf("3.←\n");
printf("4.↓\n");
printf("5.필살기(SP 1 필요) 현재:%d \n",dp->SP);
scanf_s("%d", &y);
if (dp->SP == 0 && y == 5) { printf("다시선택"); goto here; }
}
else if (x == 3)
{
y = 0;
}
else
{
cout << "다시선택" << endl;
goto re;
}
dp->action1[i] = x;
dp->action2[i] = y;
//system("cls");
GUI_f(A.axis_x, A.axis_y, C.axis_x, C.axis_y);;
}
}
else if (dp->AI == true)
{
GUI_p(&A, &C);
for (int i = 0; i < 3; i++)
{
cout << "삐이이이삑 알파고 작 동 중 ..." << endl;
cout << "최적의 전략 선택중 ..." << endl;
Sleep(700);
srand((unsigned)time(NULL));
int x = rand() % 3 + 1;
if (x = 3)
{
x = rand() % 3 + 1;
if (x = 3)
{
x = rand() % 3 + 1;
}
}
int y = rand() % 4 + 1;
if (dp->SP >= 1 && rand()%2 )
{
x = 2; y = 5;
(dp->SP)--;
}
dp->action1[i] = x;
dp->action2[i] = y;
}
}
}