none
Acemiyim Yardım Etmenizi Bekliyorum RRS feed

  • Soru

  • Görüntü atamadım. Programı anlatıyım.Satranç Saati tarzı bişey yapıorum. 2 adet buton var. 1.buton 1.oyuncu 2.buton ise 2.oyuncu.      her oyuncunun süresi labellerda yazılıı  

    Birinci butona basınca 1.oyuncunun vakti duracak 2.oyuncunun vakti başlıcak.
    2.oyuncu hamlesini yapınca 2.butona basıcak ve 2.oyunun zamanı duracak. 1.oyunucun devam edicek. ben şimdi programı yazdım ve takıldıgım nokta ise mesela butona bastıgımda karsı oyunucunun süresi başa sarıyor kaldıgı yerden devam etmiyor. bunu çözebilicek arkadas varsa çok yardım etmiş olur
    teşekkürler

    Kodlar : 
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace WindowsFormsApplication2
    {
        public partial class Form2 : Form
        {
            public int seconds; 
            public int minutes; 
            public int hours;   
            public bool paused;
            public Form2()
            {
                InitializeComponent();
            }

          private void button1_Click(object sender, EventArgs e)
            {
              if ((textBox1.Text != "") && (textBox2.Text != "") && (textBox3.Text != ""))
                   {
                        timer1.Enabled = false;
                        timer2.Enabled = true;
                        try
                        {
                            hours = System.Convert.ToInt32(textBox1.Text);
                            minutes = System.Convert.ToInt32(textBox2.Text);
                            seconds = System.Convert.ToInt32(textBox3.Text);
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message);
                        }
                   }
                   else
                   {
                        MessageBox.Show("Boş Alanları Doldurunuz");
                   }
                }
            private void timer1_Tick(object sender, EventArgs e)
          {
                
                if ((dakika == 0) && (saat == 0) && (saniye == 0))
                {
                   timer1.Enabled = false;
                   MessageBox.Show("Süre Doldu !","Uyarı",MessageBoxButtons.OK,MessageBoxIcon.Error);
                   textBox1.Clear();
                   textBox2.Clear();
                   textBox3.Clear();
                }
                else
                {
                   if (seconds < 1)
                   {
                        seconds = 59;
                        if (minutes == 0)
                        {
                            minutes = 59;
                            if (hours != 0)
                                hours -= 1;
                          
                        }
                        else
                        {
                            minutes -= 1;
                        }
                   }
                   else
                        seconds -= 1;
                   
                   label1.Text = hours.ToString();
                   label2.Text = minutes.ToString();
                   label3.Text = seconds.ToString();
                   
                }
            }
            public int saniye;
            public int dakika;
            public int saat;
            public bool durdur;
            private void button4_Click(object sender, EventArgs e)
            {
               if ((textBox4.Text != "") && (textBox5.Text != "") && (textBox6.Text != ""))
               {
                        timer2.Enabled = false;
                        timer1.Enabled = true;
                        
                   
                        try
                        {
                            dakika = System.Convert.ToInt32(textBox5.Text);
                            saniye = System.Convert.ToInt32(textBox6.Text);
                            saat = System.Convert.ToInt32(textBox4.Text);
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message);
                        }
                   }
                   else
                   {
                        MessageBox.Show("Boş Alanları Doldurunuz");
                   }
                }
            private void timer2_Tick(object sender, EventArgs e)
            {
            
                if ((minutes == 0) && (hours == 0) && (seconds == 0))
                {
                  
                   timer2.Enabled = false;
                   MessageBox.Show("Süre Doldu !", "Uyarı", MessageBoxButtons.OK, MessageBoxIcon.Error);
                   
                   textBox4.Clear();
                   textBox5.Clear();
                   textBox6.Clear();
                }
                else
                {
                 
                   if (saniye < 1)
                   {
                        saniye = 59;
                        if (dakika == 0)
                        {
                            dakika = 59;
                            if (saat != 0)
                                saat -= 1;
     }
                        else
                        {
                            dakika -= 1;
                        }
                   }
                   else
                        saniye -= 1;
                   
                   label7.Text = saat.ToString();
                   label8.Text = dakika.ToString();
                   label9.Text = saniye.ToString();
                }
            }

            private void button7_Click(object sender, EventArgs e)
            {
                groupBox1.Text = textBox7.Text;
                groupBox2.Text = textBox8.Text;

            }

            private void Form2_FormClosing(object sender, FormClosingEventArgs e)
            {
                if (MessageBox.Show("Çıkmak İstediğinizden Emin misiniz?", "Onay", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
                {
                   e.Cancel = true;
                }
            }
     }
    }

    29 Mart 2016 Salı 19:15

Yanıtlar

  • Program açısından değil de Satranç saati açısından bir kaç şey diyeyim

    1. Satranç saatinde oyunculardan birinin süresi bitince uyarı vermez. Masada hekem olsa bile "süreniz bitti" diye uyaramaz. Sürenin bitişini rakip görmelidir. Bazen rakip bunu farkedemeğinden oyun berabere biter.

    2. FIDE (uluslararası satranç federasyonu) tarafından belirlenmiş zaman tipleri vardır. Elektronik satranç saatlerinde atıyorum direk 14 numaralı tip seçilerek örneğin 5dk ya 5 dk süre seçilebilir. Böyle bir şeyi ekleyebilirsiniz.

    3. Bu tiplerden bazıları arttırmalıdır. Örneğin son yıllarda çok polüler olan 3+2 modelinde oyunculara 3 dakika ve hamle başına 2 saniye verilir. Yani oyuncu kendi butonuna her bastığında süresi 2 saniye artar. Bilginiz olması açısından.

    4. Yine bilgi olması açısından saat üzerinde durdurma, oyuncununun ceza alması durumunda rakibin süresini arttırma veya oyunucunun süresini düşürme gibi cezalar vardır.

    30 Mart 2016 Çarşamba 01:11

Tüm Yanıtlar

  • Sen zaman ile ilgili işleri yapmaya uğraşmışsın, bunlar framework içinde zaten var. Bak şuna benzer bişey yapmalısın;

    class Game
    {
       public List<Player> Players { get; set; } = new List<Player>();
       public Player CurrentPlayer { get; private set; }
       
       private int _playerIndex = 0;
       private DispatcherTimer _timer = new DispatcherTimer();
       
       public Game()
       {
          _timer.Interval = TimeSpan.FromSeconds(1);
          _timer.Tick += (s,e) => {
    	      CurrentPlayer.Time+= TimeSpan.FromSeconds(1);
          };
       }
       
       public void SwitchPlayer()
       {
           _playerIndex++;
           _playerIndex %= this.Players.Count;
           CurrentPlayer = this.Players[_playerIndex];
       }
       
       public void StartGame()
       {
         _timer.Start();
       }
       
       public void PauseGame()
       {
         _timer.Stop();
       }
       
    public void ResetGame()
    {
    this.Players.ForEach(p=> p.Time = TimeSpan.Zero);
    _playerIndex = 0;
    } } class Player { public string Name { get; set; } public TimeSpan Time { get; set; } = TimeSpan.Zero; public override string ToString() { return $"Oyuncu: {this.Name}, Süresi: {this.Time.ToString("t")}"; } }
    Not: C# 6 kod içerir.


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com








    29 Mart 2016 Salı 20:42
  • Program açısından değil de Satranç saati açısından bir kaç şey diyeyim

    1. Satranç saatinde oyunculardan birinin süresi bitince uyarı vermez. Masada hekem olsa bile "süreniz bitti" diye uyaramaz. Sürenin bitişini rakip görmelidir. Bazen rakip bunu farkedemeğinden oyun berabere biter.

    2. FIDE (uluslararası satranç federasyonu) tarafından belirlenmiş zaman tipleri vardır. Elektronik satranç saatlerinde atıyorum direk 14 numaralı tip seçilerek örneğin 5dk ya 5 dk süre seçilebilir. Böyle bir şeyi ekleyebilirsiniz.

    3. Bu tiplerden bazıları arttırmalıdır. Örneğin son yıllarda çok polüler olan 3+2 modelinde oyunculara 3 dakika ve hamle başına 2 saniye verilir. Yani oyuncu kendi butonuna her bastığında süresi 2 saniye artar. Bilginiz olması açısından.

    4. Yine bilgi olması açısından saat üzerinde durdurma, oyuncununun ceza alması durumunda rakibin süresini arttırma veya oyunucunun süresini düşürme gibi cezalar vardır.

    30 Mart 2016 Çarşamba 01:11
  • İlkel bir oyun. Hamle sayısı belli. Ezberle geç. Adam o kadar ezberlemiş ki simultane 30 kişiye karşı oynuyor, millet alkışlıyor. Sıkıysa red alert ' te karşıma çıksın :)

    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    30 Mart 2016 Çarşamba 06:36