Acil c dilinde santranc proje bitmedi 1 gün kaldi

kdr55

MB Üyesi
Kayıt
26 Aralık 2018
Mesajlar
1
Tepkiler
0
Yaş
30
Üniv
Giresun
/******************************************************************************
Online C Compiler.
Code, Compile, Run and Debug C program online.
Write your code in this editor and press "Run" button to compile and execute it.
*******************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void initializeTheBoard(char **, int, int);
void printScreen(char **, int, int);
void play(char **, int *);
int canMove(char **, int, int, int, int, int);
int pawnMove(char **, int, int, int, int, int);
int destinationCheck(char, int);
int isGameOver(char **, int, int);
#define HEIGTH 8
#define WIDTH 8
int main()
{
char **arr;
int i = 0, turn = 0, gameOver=0;
//hafızadan alan al
arr = malloc(sizeof(char *) * HEIGTH);
for(; i<HEIGTH; i++)
{
arr = malloc(sizeof(char) * WIDTH);
}
//tahtaya ilk halini ver
initializeTheBoard(arr, HEIGTH, WIDTH);
do
{
printScreen(arr, HEIGTH, WIDTH);
play(arr, &turn);
}while( (gameOver=isGameOver(arr, HEIGTH, WIDTH)) == 0);
printf("%d player wins!", gameOver);
//hafizayi geri bırak
for(i=0;i<5;i++)
{
free(arr);
}
free(arr);
return 0;
}
//kullanıcıların ikisinin de sah tası mevcut mu
//eger oyleyse return 0
//eger 0. oyuncunun tasi yoksa 1 dondur
//eger 1. oyuncunun tasi yoksa 2 dondur
int isGameOver(char ** arr, int nRows, int nCols)
{
return 0;
}
//hareket edilecek hedef noktasindaki tas kimin
//eger siranin kendisindeki oyuncunun ise 0
//degilse 1 dondur
int destinationCheck(char destPiece, int turn)
{
//turn 0 ise
if ( (destPiece >= 'A' && destPiece <= 'Z') && turn == 0)
{
return 0;
}
//turn 1 ise
if ( (destPiece >= 'a' && destPiece <= 'z') && turn == 1)
{
return 0;
}
return 1;
}
//piyon hareketi. hareket gecerliyse 1 degilse 0 dondurur
int pawnMove(char **arr, int sRow, int sCol, int eRow, int eCol, int direction)
{
//hareket duz ise ilgili alan bos mu?
if (eRow == sRow + direction && sCol == eCol)
{
if(arr[eRow][eCol] == ' ')
{
return 1;
}
}
//hareket capraz ise hedef alan bos olmamalı
else if (
eRow == sRow + direction &&
( (sCol == eCol+1) || (sCol == eCol-1) )
)
{
if (arr[eRow][eCol] != ' ')
{
return 1;
}
}
//buraya ulastıysa yukaridaki returnlere ulasamamistir o yuzden 0 dondur
return 0;
}
//tasın cinsine göre her tasi kontrol et fonksiyonlarını yaz
//destinationCheck fonksiyonu yukarıda yazılmıs ve hedef olarak gideceginiz
//noktadaki tasin kimin olduğuna bakar. Eğer sıranın kendindeki oyuncunun tası
//ise 0 dondurur. Değilse 1 dondurur. Boylece hem hareket fonksyionunda
//gelen deger 1 hem de destinationCheck fonksiyonundan donen deger 1 ise
//canMove fonksiyonu 1 dondurur. && ile bu durum kontrol edilebilir
int canMove(char **arr, int turn, int sRow, int sCol, int eRow, int eCol)
{
char piece = arr[sRow][sCol];
if (piece == 'P')
{
return pawnMove(arr, sRow, sCol, eRow, eCol, 1) && destinationCheck(arr[eRow][eCol], turn);
}
else if ( piece == 'p')
{
return pawnMove(arr, sRow, sCol, eRow, eCol, -1) && destinationCheck(arr[eRow][eCol], turn);
}
//buradan sonrası her tas icin fonksiyon yazacaksınız
//fil hareketi icin yaz
else if (piece == 'F' || piece == 'f')
{
}
//at hareketi icin yaz
else if (piece == 'A' || piece == 'a')
{
}
//kale icin yaz
else if (piece == 'K' || piece == 'k')
{
}
//vezir icin yaz
else if (piece == 'V' || piece == 'v')
{
}
//sah icin yaz
else //veya else if (piece == 'S' || piece == 's') yazabilirsiniz
{
}
//yukarıdaki kodlar yazıldığında buraya ulasamaz ama su anki halinde warning almamak icin yazıldı.
//Tum kodu yazınca silebilirsiniz.
return 0;
}
void play(char **arr, int *turn)
{
char *sMove, *eMove;
int sRow, sCol, eRow, eCol;
sMove = malloc(sizeof(char) * 3);
eMove = malloc(sizeof(char) * 3);
do
{
printf("%d. player turn: ", *turn+1);
scanf("%2s %2s", sMove, eMove);
fflush(stdin);
sRow = (int)(sMove[0] - 'A');
sCol = (int)(sMove[1] - '1');
eRow = (int)(eMove[0] - 'A');
eCol = (int)(eMove[1] - '1');
if(
(sRow >= 0 && sRow <= 7) &&
(sCol >= 0 && sCol <= 7) &&
(eCol >= 0 && eCol <= 7) &&
(eRow >= 0 && eRow <= 7)
)
{
char piece = arr[sRow][sCol];
//secilen tas sırası gelen kullanıcının mı
if (
( *turn == 0 && (piece >= 'A' && piece <= 'Z') )
||
( *turn == 1 && (piece >= 'a' && piece <= 'z') )
)
{
//secilen tas hedef konuma gidebilir mi
if( canMove(arr, *turn, sRow, sCol, eRow, eCol) == 1 )
{
arr[eRow][eCol] = piece;
arr[sRow][sCol] = ' ';
*turn = (*turn + 1) % 2;
break;
}
//eger gidemiyorsa illegal move
else
{
printf("Illegal move. Try again.\n");
}
}
//secilen tas kullanıcının degil
else
{
printf("It's your opponent's piece\n");
}
}
//istenen konumlar aralıkta girilmemis
else
{
printf("Your move is out of boundary\n");
}
}while(1);//dogru hareket yapılana kadar devam eder. Dogru hareket yapıldıysa
//yukarıdaki break bu while kosulunu kırar ve cıkılır.
}
//dizi iceriklerini ekrana yaz.
//her bir tas bir karenin icine girsin diye
//bir kac duzenleme yapildi
void printScreen(char ** arr, int nRows, int nCols)
{
//ekranı her seferinde silip tekrar yazmak isterseniz.
//aşagıdaki komutu aciniz
system("@cls||clear");
int i, j;
printf("%s", " |");
for(j=0;j<nCols;)
{
printf(" %d |", ++j);
}
printf("\n--");
for(j=0;j<nCols;j++)
{
printf("%s", "------");
}
printf("\n");
for(i=0;i<nRows;i++)
{
printf("%c|", 'A'+i);
for(j=0;j<nCols;j++)
{
printf(" %c |", arr[j]);
}
printf("\n--");
for(j=0;j<nCols;j++)
{
printf("%s", "------");
}
printf("\n");
}
}
void initializeTheBoard(char **arr, int nRows, int nCols)
{
int i, j;
for(i=0;i<nRows-2;i++)
{
for(j=0;j<nCols;j++)
{
if (i == 0)
{
if (j == 0 || j==nCols-1)
{
arr[j] = 'K';
}
else if (j == 1 || j==nCols-2)
{
arr[j] = 'A';
}
else if (j == 2 || j==nCols-3)
{
arr[j] = 'F';
}
else if (j == 3 )
{
arr[j] = 'V';
}
else
{
arr[j] = 'S';
}
}
else if (i == 1)
{
arr[j] = 'P';
}
else
{
arr[j] = ' ';
}
}
}
//last 2 rows for opponent
for(i=nRows-2; i<nRows;i++)
{
for(j=0;j<nCols;j++)
{
//add 32 to lower the opponent's character
arr[j] = arr[nRows-i-1][j] + 32;
}
}
}
 
Yukarı Alt