Şimdi Ara

C ve C++ proje onerisi !

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
10
Cevap
0
Favori
902
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • merhaba arkadaslar
    C ve C++ biliyorum bu aralar proje gelistirmek istiyorum proje onerisi olan varsa yazabilir mi ? birlikte beyin firtinasi yapabiliriz :D



  • "Yıllar önce arkadaşımla beraber eğlenceli bir sayı tahmin oyunu oynardık. Bilmiyorum, bilindik bir oyun mudur? Ama öğrendiğimden beri sık sık sıra arkaşımla oynardım. Neyse kod yazmayı öğrenince bir gün aklıma geldi şunun bir programını yazayım diye, biraz uğraşla oldu. Şimdi bu oyunu yapma sırası sizde. Oturun güzelce düşünün temel seviye programcılar için çok tecrübe katacak bir program. Oyun şu şekilde:

    Bu oyun normalde iki kişiyle oynanan bir oyun. Siz bilgisayarla beraber oynayacaksınız. Bilgisayar rast gele 4 basamaklı bir sayı tutacak siz de onu tahmin etmeye çalışacaksınız.

    4 basamaklı sayının özellikleri:
    * 0 ile başlamayacak
    * Tekrarlı rakam içermeyecek (2426 gibi - iki tane 2 kullanımış)

    Peki tahmin nasıl olacak. Siz yine yukarıdaki özelliklere sahip 4 basamaklı bir sayı gireceksiniz ve bilgisayar bu sayıyı inceleyip size şu şekilde bilgi verecek :

    Eğer yazdığınız 4 basamaklı sayıdan, tutulan 4 basamaklı sayıyla benzer rakam varsa; eğer basamağı uyuşuyorsa benzer rakam adedi=x olmak üzere bilgisayar +x, eğer basamağı uyuşmuyorsa -x, şeklinde sonuç bildirir. +4 ü yakalyınca sayıyı bilmiş olup oyun sonlandırılır. Şu örneği inceleyelim (bilgisayarın tuttuğu sayı 1453 olsun):

    tahmin1: 5809 -> sonuc1: +0 -1 açıklama1: yalnız 5 tuttu fakat basamağı oturmadığı için - olarak yazıldı
    tahmin2: 1039 -> sonuc2: +1 -1 açıklama2: 1 tutttu basamağı da tuttu +1, 3 tuttu basamağı tutmadı
    tahmin3: 1498 -> sonuc3: +2 -0 açıklama3: 1 ve 4 basamağıyla beraber tuttu, iki tane olduğu için +2
    tahmin4: 1435 -> sonuc4: +2 -2 açıklama4: 1 ve 4 aynı şekilde. 3 ve 5 basamağı tutmadığı için -2
    tahmin5: 1453 -> sonuc5: +4 -0 açıklama5: hepsi basamğıyla beraber tuttu, oyun bitti

    Daha açıklayıcı olsun diye algoritmik sırası kısaca şı şekilde:
    *sayıyı kurallara uygun üret
    *kullancıdan alına verinin kurallara uygunluğunu kontrol et
    *değerlendirme yap
    *+4 olana kadar kullanıcıdan veriyi almaya kontrol etmeye devam et

    Hadi kolay gelsin (kaynak kodu çözülmediği takdirde paylaşacağım)... "


    alıntıdır.



    < Bu mesaj bu kişi tarafından değiştirildi keftar -- 5 Eylül 2014; 14:56:22 >




  • Bence bunu, bilgisayarin da tahmin yapacagi sekilde yazmak daha zevkli.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • keftar kullanıcısına yanıt
    şerafettin arıkan'ın kitabında görüp,çözmeye çalışmıştım. Hatırladığım kadarıyla oyunu yapmıştım ancak bir bölümü eksik kalmıştı.Acaba kaynak kodu, pm atar mısın? Saygılarımla...
  • sparcoysn S kullanıcısına yanıt
    #include <conio.h> 
    #include <iostream>
    #include <time.h>
    #include <string>
    using namespace std;
    class Oyun
    {
    public:
    void rastgele();
    int farkli();
    void sayiAl();
    bool esitmi();
    bool sart(Oyun);
    bool sifir();
    bool farklimi();
    void degerlendir();
    char sayi[4];
    string tahmin;
    private:
    char rast;
    };
    int main()
    {
    Oyun A;
    srand(time(0));
    A.rastgele();
    A.sayiAl();
    if(A.sart(A)==false && A.esitmi())
    A.degerlendir();
    while(A.sart(A) || A.esitmi())
    {
    if(A.sifir())
    cout<<"sayi 0 ile baslamayacak!!"<<endl;
    if(A.farklimi())
    cout<<"sayilar birbirinden farkli olacak!!"<<endl;
    A.sayiAl();
    if(A.sart(A)==false && A.esitmi())
    A.degerlendir();
    }
    A.degerlendir();
    cout<<"tebrikler bildiniz!!!";
    getch();
    }
    void Oyun::rastgele()
    {
    for(int i=0; i<4; i++)
    {
    c:

    rast=rand()%10+48;
    sayi[i]=rast;
    if(sayi[0]=='0')
    goto c;
    if(sayi[i]==sayi[i-1] || sayi[i]==sayi[i-2] || sayi[i]==sayi[i-3])
    goto c;

    }
    }
    void Oyun::sayiAl()
    {
    cout<<"sayiyi tahmin et"<<endl;
    cin>>tahmin;
    }
    bool Oyun::sart(Oyun A)
    {
    if(A.sifir() || A.farklimi())
    return true;
    else
    return false;
    }
    bool Oyun::esitmi()
    {
    int sayac=0;
    for(int i=0; i<4; i++)
    if(sayi[i]==tahmin[i])
    sayac++;
    if(sayac==4)
    return false;
    else
    return true;
    }
    bool Oyun::sifir()
    {
    if(tahmin[0]=='0')
    return true;
    else true;
    }
    bool Oyun::farklimi()
    {
    int k=0;
    for(int i=0; i<3; i++)
    for(int j=i+1; j<4; j++)
    if(tahmin[i]==tahmin[j])
    k++;
    if(k!=0)
    return true;
    else
    return false;
    }
    void Oyun::degerlendir()
    {
    int arti=0,eksi=0;
    for(int i=0; i<4; i++)
    for(int j=0; j<4; j++)
    { if(i==j)
    { if(sayi[i]==tahmin[j])
    arti++;
    }
    if(i!=j)
    { if(sayi[i]==tahmin[j])
    eksi++;
    }
    }
    cout<<"+"<<arti<<" -"<<eksi<<endl;
    }


    alıntırdır.



    < Bu mesaj bu kişi tarafından değiştirildi keftar -- 5 Eylül 2014; 22:28:54 >




  • keftar kullanıcısına yanıt
    Henüz C++ bilmiyorum acaba C ile yazılmışı yok mu?
  • o zaman c++ öğrenme zamanın geldi

    yazılan kodun c'den farkı printf yerine cout scanf yerine cin yazılmış.

    ama normal c ile c++ arasında bundan daha fazla farklılıklar tabi

    syntax'ları benzerdir genel olarak ama programlama mantıkları -temelde aynı olmakla birlikte- birbirinden farklıdır.
  • bu oyun beni biraz zorlar gibi geldi bana ama cok tesekkur ederim
  • keftar kullanıcısına yanıt
    Hocam ne iyi etmişsinizde yazmışsınız bende android öğreniyorum bugün javada bilgilerimi tazelemek için ufak çaplı proje bakıyordum ki sizin projenize denk geldim. Yaklaşık 1 saatimi aldı ama yaparken cidden eğlendim. Yarın işim olduğu için ve saat geç olduğundan görselliğini falan ayarlayamadım ama geliştirilebilir birşey size şöyle sunayım.

    Arkadaş c veya c++ ile istemiş ben android üzerinde geliştirdim.

    Sağ kısımda ki logcatte rasgele sayı görülüyor kırmızı olarak. Burda işin biraz hilesine kaçtım size gösterme amacıyla :) .


     C ve C++ proje onerisi !


     C ve C++ proje onerisi !


    Kodu da vereyim;

     


    package com.example.sayioyunudonanim;



    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.widget.Toast;


    public class MainActivity extends Activity {


    String sayiKarakterleri,SsabitSayi;
    String girilenSayi;
    int sabitSayi;
    EditText sayiEditText;
    Button denemeButton;
    TextView puanDurumu;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    sayiEditText=(EditText) findViewById(R.id.sayiEditText);
    Button deneButton=(Button) findViewById(R.id.deneButton);
    puanDurumu=(TextView) findViewById(R.id.puanlamaTextView);
    suzgectenGecir();

    deneButton.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
    girilenSayiDon();

    }
    });


    }

    public int rasgeleSayiUret(){


    int rasgeleSayi=0;


    rasgeleSayi=1234+(int)(Math.random()*8765);

    return rasgeleSayi;
    }

    public void suzgectenGecir(){
    int c=rasgeleSayiUret();
    sayiKarakterleri=String.valueOf(c);
    char [] sayiKarBol;
    sayiKarBol=sayiKarakterleri.toCharArray();
    boolean suzgec=false;

    while(!suzgec){
    Log.e("tag", String.valueOf(c));
    sabitSayi=c;

    for(int i=0 ; i<3;i++){

    for(int y=i+1;y<4;y++){


    if(sayiKarBol[i]==sayiKarBol[y]){

    suzgectenGecir();


    }
    else{
    suzgec=true;

    }

    }

    }
    }

    }

    public int sabitSayiDon(){
    return sabitSayi;
    }

    public void girilenSayiDon(){
    int arttir = 0, azalt=0;
    girilenSayi=String.valueOf(sayiEditText.getText());
    char [] girilenSayiBol , sabitSayiBol;
    girilenSayiBol=girilenSayi.toCharArray();
    SsabitSayi=String.valueOf(sabitSayi);
    sabitSayiBol=SsabitSayi.toCharArray();

    Log.e("tag", String.valueOf(sabitSayi));

    if(Integer.valueOf(girilenSayi)<1000){

    Toast.makeText(this, "Girdiginiz Sayi 1000'den kucuk olamaz!",Toast.LENGTH_LONG).show();

    }
    else{
    for(int i=0;i<4;i++){


    for(int y=0;y<4;y++){

    if(sabitSayiBol[i]==girilenSayiBol[y]){
    if(i==y){
    arttir++;
    }
    else{
    azalt--;
    }

    }

    }

    }

    puanDurumu.setText(puanDurumu.getText()+"Tahminin: "+girilenSayi+" D.Basamak:"+arttir+" Y.Basamak: "+azalt+"|| ");

    if(arttir==4){


    Toast.makeText(this, "Tebrikler Sayiyi Dogru Tahmin Ettiniz!", Toast.LENGTH_LONG).show();
    }

    }
    }

    }




    < Bu mesaj bu kişi tarafından değiştirildi BayGold -- 8 Eylül 2014; 1:58:09 >




  • O c++ kodunu yazan daha döngü kuramamış ki. Kodda class oldumu oop yazdığını zannediyor bi kısım zevat. Ben genel amaçlı versiyonunu yazdım. İster konsolda, ister pencereli, grafikli olarak geliştirilebilir. I/O kullanıcıya bırakıldı. Kaç basamaklı olacağını da seçebilirsiniz, 4 olması şart değil.

    tahmin.h
     
    #ifndef TAHMIN_H
    #define TAHMIN_H
    #include <random>

    class SoyutTahmin
    {
    public:
    SoyutTahmin(int);
    void yenidenUret();
    bool degerlendir(int);

    private:
    void kontrolEt(const std::string &);
    virtual bool sonuc(int, int) = 0;

    char tut_sayi[10];
    std::default_random_engine uretec;
    std::uniform_int_distribution<> rast_rakam;

    protected:
    const int basamak;
    };

    #endif // TAHMIN_H


    tahmin.cpp
     
    #include "tahmin.h"
    #include <algorithm>

    SoyutTahmin::SoyutTahmin(int _bas) : rast_rakam(1, _bas - 1), basamak(_bas)
    {
    std::random_device bas_deger;
    uretec.seed(bas_deger());

    for(int i = 0; i < 10; ++i)
    tut_sayi[i] = i + '0';
    yenidenUret();
    }

    void SoyutTahmin::yenidenUret()
    {
    std::shuffle(tut_sayi, tut_sayi + 10, uretec);
    if(tut_sayi[0] == '0')
    std::swap(tut_sayi[0], tut_sayi[rast_rakam(uretec)]);
    }

    bool SoyutTahmin::degerlendir(int tahmin)
    {
    std::string str = std::to_string(tahmin);
    kontrolEt(str);

    const char *sayi = str.c_str();
    char *son = tut_sayi + basamak;
    int poz = 0, neg = 0;

    for(int i = 0; i < basamak; ++i) {
    if(std::find(tut_sayi, son, sayi[i]) != son) {
    if(sayi[i] == tut_sayi[i])
    ++poz;
    else
    ++neg;
    }
    }
    return sonuc(poz, neg);
    }

    void SoyutTahmin::kontrolEt(const std::string &str)
    {
    auto bak = [&str] (char kr)-> bool {
    return std::count(str.begin(), str.end(), kr) > 1;
    };
    if(basamak != str.length() || std::any_of(str.begin(), str.end(), bak))
    throw basamak;
    }


    main.cpp
     
    #include <iostream>
    #include "tahmin.h"

    class Tahmin : public SoyutTahmin
    {
    public:
    Tahmin(int _bas = 4) : SoyutTahmin(_bas) { }

    private:
    bool sonuc(int poz, int neg)
    {
    std::cout << "+" << poz << " -" << neg << std::endl;
    return poz == basamak;
    }
    };

    int main()
    {
    std::cout << "Sayıyı tahmin edin\n";
    Tahmin oyun;
    int sayi;
    bool bitti = false;

    do {
    std::cin >> sayi;
    try {
    bitti = oyun.degerlendir(sayi);
    }
    catch(int a) {
    std::cout << "Hatalı giriş! Kurallara uygun sayı girin.\n";
    continue;
    }
    }
    while(!bitti);

    std::cout << "Oyun bitti.\n";
    return 0;
    }



    < Bu mesaj bu kişi tarafından değiştirildi Guest-BF8E9B238 -- 8 Eylül 2014; 7:22:28 >




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.