#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <locale.h>
int isPrime(int number);
int mid(int number1, int number2, int number3);
int min(int number1, int number2, int number3);
int max(int number1, int number2, int number3);
int sumIsPrime(int number1, int number2, int number3);
int isBelow150(int number1, int number2, int number3);
int maxAndMinGapIsBigMid(int number1, int number2, int number3);
int getNumber();
void ucPulCek(int pullar[]);
int main(int argc, char **argv)
{
char oyun;
int pullar[3];
//int kazanmaSebebi = -1;
srand((unsigned) time(0));
printf("*************************************\n");
printf("Ozellestirilmis bir tombala oyunu\n");
printf("*************************************\n");
printf("\nKurallar\n");
printf("--------------\n");
printf("\n Torbadan 3 pul cekiliyor. (1-99)\n\n");
printf("1. Cekilen pullarin toplami 150'den kucuk ise oyuncu kazaniyor.\n");
printf("2. Cekilen pullarin toplami asal sayi ise oyuncu kazaniyor.\n");
printf("3. En buyuk degerli pul ile en kucuk degerli pul arasindaki fark ortanca degerli puldan buyuk ise oyuncu kazaniyor.\n");
printf("\n Diger durumlarda oyuncu kaybediyor\n");
printf("------------------------------------------\n");
INOUTGAME:
printf("\nYeni oyun icin [e/E], cikmak icin [q/Q] : ");
oyun = _getche();
//0010 0000 - 32
oyun = oyun | 32; //küçült
if(oyun == 'q') goto GAMEOVER;
if(oyun != 'e') goto INOUTGAME;
printf("\n");
ucPulCek(pullar);
printf("\n\nCekilen pullar\n");
printf("------------------\n");
printf("1. Pul - %d\n", pullar[0]);
printf("2. Pul - %d\n", pullar[1]);
printf("3. Pul - %d\n", pullar[2]);
printf("------------------\n");
//Birinci kural
if(isBelow150(pullar[0], pullar[1], pullar[2])) goto WIN;
//ikinci kural
if(sumIsPrime(pullar[0], pullar[1], pullar[2])) goto WIN;
//üçüncü kural
if(maxAndMinGapIsBigMid(pullar[0], pullar[1], pullar[2])) goto WIN;
printf("Kaybettin\n");
printf("++++++++++++++++++++++++++++++++++++++++\n");
printf("++++++++++++++++++++++++++++++++++++++++\n");
goto INOUTGAME;
WIN:
printf("Kazandin\n");
printf("++++++++++++++++++++++++++++++++++++++++\n");
printf("++++++++++++++++++++++++++++++++++++++++\n");
goto INOUTGAME;
GAMEOVER:
printf("\nOyun Bitti\n");
system("pause");
return 0;
}
void ucPulCek(int pullar[]){
//pulları sıfırla
for(int i = 0; i < 3; i++) pullar = 0;
printf("\n");
for(int i = 0; i < 3; i++){
printf("Torbadan %d. pulu cekmek icin herhangi bir tusa bas : ", i + 1);
_getch();
int pul = getNumber();
while(pullar == pul) pul = getNumber();
pullar = pul;
printf("%d\n", pul);
}
}
//tombaladan bir pul çek
int getNumber(){
return (rand() % 99) + 1;
}
//En büyük değerli pul ile en küçük değerli pul arasındaki fark ortanca değerli puldan büyük ise
int maxAndMinGapIsBigMid(int number1, int number2, int number3){
int maxNumber = max(number1, number2, number3);
int minNumber = min(number1, number2, number3);
int midNumber = mid(number1, number2, number3);
return (maxNumber - minNumber) > midNumber;
}
//çekilen pulların ortancası
int mid(int number1, int number2, int number3){
int lowest = min(number1, number2, number3);
if(lowest == number1) return number2 < number3 ? number2 : number3;
else if(lowest == number2) return number1 < number3 ? number1 : number3;
else return number1 < number2 ? number1 : number2;
}
//çekilen pulların en küçüğü
int min(int number1, int number2, int number3){
int temp = number1 < number2 ? number1 : number2;
return temp < number3 ? temp : number3;
}
//çekilen pulların en büyüğü
int max(int number1, int number2, int number3){
int temp = number1 > number2 ? number1 : number2;
return temp > number3 ? temp : number3;
}
//çekilen pulların toplamı asal mı
int sumIsPrime(int number1, int number2, int number3){
return isPrime(number1 + number2 + number3);
}
//çekilen pulların toplamı 150'den küçük mü
int isBelow150(int number1, int number2, int number3){
return (number1 + number2 + number3) < 150;
}
//asal kontrolü
int isPrime(int number){
if(number < 2) return 0;
if(!(number & 1)) return number == 2;//sayı tek değilse
if(number % 3 == 0) return number == 3;
if(number % 5 == 0) return number == 5;
if(number % 7 == 0) return number == 7;
int kare = (int) sqrt(number);//sayının kareköküne kadar yeterli
int start = 9;
for(;start < kare; start += 2)
if(number % start == 0) return 0;
return 1;
}
Buradan kodları alabilirsin.
Düzeltme yapılabilir. Problem hoşuma gitti. Fakat tarifte bir eksik var. Oyuncu kaybettiğinde değil belki ama kazandığında neden kazandığını da bildirmek gerek. En büyük eksik bu oldu bence. Sayfada köşeli parantezlerle ilgili de bir sorun var. Bazı yerlerde görünüyor, bazı yerlerde görünmüyor. O yüzden kodlar şuan hatalı göünüyor. Kaynak dosyadan incele.