반응형
SMALL
먼저 필자는 컴퓨터 공학과 학생이며 이러한 글을 쓰는 이유는 지피티같은 AI들이 우리의 돈벌이를 빼앗가 가기 때문에 그럴바에는 적극적으로 활용해 보면 어떨까라는 생각에서 시작하게 되었다.
먼저, 챗 지피티에게 틱텍토 게임을 c++로 만들어달라고 해보았더니
#include <iostream>
using namespace std;
const int SIZE = 3;
char board[SIZE][SIZE];
char currentPlayer = 'X';
void initializeBoard() {
for (int i = 0; i < SIZE; ++i) {
for (int j = 0; j < SIZE; ++j) {
board[i][j] = ' ';
}
}
}
void printBoard() {
for (int i = 0; i < SIZE; ++i) {
for (int j = 0; j < SIZE; ++j) {
cout << board[i][j];
if (j < SIZE - 1) cout << " | ";
}
cout << endl;
if (i < SIZE - 1) cout << "--|---|--" << endl;
}
}
bool placeMarker(int row, int col) {
if (row >= 0 && row < SIZE && col >= 0 && col < SIZE && board[row][col] == ' ') {
board[row][col] = currentPlayer;
return true;
}
return false;
}
bool checkWin() {
// Check rows and columns
for (int i = 0; i < SIZE; ++i) {
if ((board[i][0] == currentPlayer && board[i][1] == currentPlayer && board[i][2] == currentPlayer) ||
(board[0][i] == currentPlayer && board[1][i] == currentPlayer && board[2][i] == currentPlayer)) {
return true;
}
}
// Check diagonals
if ((board[0][0] == currentPlayer && board[1][1] == currentPlayer && board[2][2] == currentPlayer) ||
(board[0][2] == currentPlayer && board[1][1] == currentPlayer && board[2][0] == currentPlayer)) {
return true;
}
return false;
}
bool checkDraw() {
for (int i = 0; i < SIZE; ++i) {
for (int j = 0; j < SIZE; ++j) {
if (board[i][j] == ' ') return false;
}
}
return true;
}
void switchPlayer() {
currentPlayer = (currentPlayer == 'X') ? 'O' : 'X';
}
int main() {
initializeBoard();
bool gameEnded = false;
while (!gameEnded) {
printBoard();
int row, col;
cout << "Player " << currentPlayer << ", enter your move (row and column): ";
cin >> row >> col;
if (placeMarker(row - 1, col - 1)) {
if (checkWin()) {
printBoard();
cout << "Player " << currentPlayer << " wins!" << endl;
gameEnded = true;
} else if (checkDraw()) {
printBoard();
cout << "The game is a draw!" << endl;
gameEnded = true;
} else {
switchPlayer();
}
} else {
cout << "This move is not valid" << endl;
}
}
return 0;
}
다음과 같은 코드를 짜 주었다.
입력을 클릭으로 받고 싶어서 다시 한번 물어보니
#include <SDL.h>
#include <iostream>
const int WINDOW_WIDTH = 600;
const int WINDOW_HEIGHT = 600;
const int CELL_SIZE = WINDOW_WIDTH / 3;
char board[3][3];
char currentPlayer = 'X';
bool gameEnded = false;
void initializeBoard() {
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
board[i][j] = ' ';
}
}
}
void drawBoard(SDL_Renderer* renderer) {
SDL_SetRenderDrawColor(renderer, 0, 0, 0, SDL_ALPHA_OPAQUE);
for (int i = 1; i < 3; ++i) {
SDL_RenderDrawLine(renderer, i * CELL_SIZE, 0, i * CELL_SIZE, WINDOW_HEIGHT);
SDL_RenderDrawLine(renderer, 0, i * CELL_SIZE, WINDOW_WIDTH, i * CELL_SIZE);
}
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
if (board[i][j] == 'X') {
SDL_RenderDrawLine(renderer, j * CELL_SIZE, i * CELL_SIZE, (j + 1) * CELL_SIZE, (i + 1) * CELL_SIZE);
SDL_RenderDrawLine(renderer, (j + 1) * CELL_SIZE, i * CELL_SIZE, j * CELL_SIZE, (i + 1) * CELL_SIZE);
} else if (board[i][j] == 'O') {
SDL_RenderDrawCircle(renderer, j * CELL_SIZE + CELL_SIZE / 2, i * CELL_SIZE + CELL_SIZE / 2, CELL_SIZE / 2);
}
}
}
}
bool placeMarker(int row, int col) {
if (row >= 0 && row < 3 && col >= 0 && col < 3 && board[row][col] == ' ') {
board[row][col] = currentPlayer;
return true;
}
return false;
}
bool checkWin() {
for (int i = 0; i < 3; ++i) {
if ((board[i][0] == currentPlayer && board[i][1] == currentPlayer && board[i][2] == currentPlayer) ||
(board[0][i] == currentPlayer && board[1][i] == currentPlayer && board[2][i] == currentPlayer)) {
return true;
}
}
if ((board[0][0] == currentPlayer && board[1][1] == currentPlayer && board[2][2] == currentPlayer) ||
(board[0][2] == currentPlayer && board[1][1] == currentPlayer && board[2][0] == currentPlayer)) {
return true;
}
return false;
}
bool checkDraw() {
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
if (board[i][j] == ' ') return false;
}
}
return true;
}
void switchPlayer() {
currentPlayer = (currentPlayer == 'X') ? 'O' : 'X';
}
int main(int argc, char* argv[]) {
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
std::cerr << "SDL could not initialize! SDL_Error: " << SDL_GetError() << std::endl;
return 1;
}
SDL_Window* window = SDL_CreateWindow("Tic Tac Toe", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, WINDOW_WIDTH, WINDOW_HEIGHT, SDL_WINDOW_SHOWN);
if (window == nullptr) {
std::cerr << "Window could not be created! SDL_Error: " << SDL_GetError() << std::endl;
SDL_Quit();
return 1;
}
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
if (renderer == nullptr) {
std::cerr << "Renderer could not be created! SDL_Error: " << SDL_GetError() << std::endl;
SDL_DestroyWindow(window);
SDL_Quit();
return 1;
}
initializeBoard();
bool quit = false;
SDL_Event e;
while (!quit) {
while (SDL_PollEvent(&e) != 0) {
if (e.type == SDL_QUIT) {
quit = true;
} else if (e.type == SDL_MOUSEBUTTONDOWN && !gameEnded) {
int x, y;
SDL_GetMouseState(&x, &y);
int row = y / CELL_SIZE;
int col = x / CELL_SIZE;
if (placeMarker(row, col)) {
if (checkWin()) {
std::cout << "Player " << currentPlayer << " wins!" << std::endl;
gameEnded = true;
} else if (checkDraw()) {
std::cout << "The game is a draw!" << std::endl;
gameEnded = true;
} else {
switchPlayer();
}
}
}
}
SDL_SetRenderDrawColor(renderer, 255, 255, 255, SDL_ALPHA_OPAQUE);
SDL_RenderClear(renderer);
drawBoard(renderer);
SDL_RenderPresent(renderer);
}
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
이러한 코드를 금새 짜주었다.
인간이 짠다면 한참 걸릴 일을 챗 지피티를 활용하니 3분도 안되어 끝난걸 볼 수 있다. 지피티를 적극적으로 활용하여 1인 사업을 차리는 것이 목표이다.
반응형
LIST
'챗 지피티' 카테고리의 다른 글
챗 지피티로 지뢰찾기 SFML사용하여 구현하기 (3) | 2024.07.22 |
---|---|
챗 지피티로 숫자야구 구현하기 (0) | 2024.07.19 |
챗 지피티로 가위바위보와 묵찌빠 구현하기 (0) | 2024.07.17 |
챗 지피티로 젓가락 게임 만들기 및 그 과정 (2) | 2024.07.16 |
챗 지피티로 윷놀이 만들기 및 그 과정 (0) | 2024.07.13 |