Jump to content

C# Araba Oyunu


KintaRo
 Share

Recommended Posts

Merhaba arkadaşlar. 

 

http://www.tnctr.com/topic/280916-c-nesnenin-hareket-ettidhini-goerebilmek

 

bu konuyu gördükten sonra bir örnekte ben yapıp nasıl olacağını denemek istedim :)

 

- Ortadan otoyol çizgileri geçiyor

- sağ ve soldan random nesneler geçiyor

- araba sağa ve sola hareket edebiliyor.

 

bodoslama dalınca bu kadar oldu. Zaman bulursam gelen nesnelerden kaçma ve puan toplama gibi özellikler eklemek isterim. Belki sizin fikirlerinizle dğeiştirebilir ya da hataları görebilirim.

 

QjFxXPU.png

 

Kodlar:

 

[spoiler]

using System;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;

namespace c_racing
{
    public partial class Form1 : Form
    {
        #region VARS
        int start = 3; // başlangıç sayacı
        bool basladi = false; // yarış başlangıç kontrolü
        string yon = null; // sağ sol kontrolü
        bool donusBitti = true; // sağa veya sola dönüşün  bitiş kontrolü 
        #endregion

        #region FORM EVENTS
        public Form1()
        {
            CheckForIllegalCrossThreadCalls = false;
            InitializeComponent();
        }

        private void Form1_KeyUp(object sender, KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.Right:
                    yon = "sag";
                    try { bgWorkerDonus.RunWorkerAsync(); }
                    catch { }
                    break;
                case Keys.Left:
                    yon = "sol";
                    try { bgWorkerDonus.RunWorkerAsync(); }
                    catch { }
                    break;
            }
        } 
        #endregion

        #region FUNCS
        // sağa dönüş
        private void Sag()
        {
            if (basladi & donusBitti)
            {
                donusBitti = false;
                picAraba.Image = c_racing.Properties.Resources.araba_donus_sag;
                for (int i = 0; i < 170; i++)
                {
                    picAraba.Location = new Point(i, picAraba.Location.Y);
                    Thread.Sleep(5);
                }
                picAraba.Image = c_racing.Properties.Resources.araba;
                donusBitti = true;
            }
        }

        // sola dönüş
        private void Sol()
        {
            if (basladi & donusBitti)
            {
                donusBitti = false;
                picAraba.Image = c_racing.Properties.Resources.araba_donus_sol;
                for (int i = 0; i < 170; i++)
                {
                    picAraba.Location = new Point(170 - i, picAraba.Location.Y);
                    Thread.Sleep(5);
                }
                picAraba.Image = c_racing.Properties.Resources.araba;
                donusBitti = true;
            }
        }

        // sağa ve sola döndürme
        private void Dondur()
        {
            if (yon == "sag")
            {
                if (picAraba.Location.X < 2)
                    Sag();
            }
            else
            {
                if (picAraba.Location.X > 168)
                    Sol();
            }
        }

        // otoyol çizgileri
        private void CizgiOlustur(string isim, int locY, EventHandler handle)
        {
            PictureBox pic = new PictureBox();
            pic.Name = isim;
            pic.Width = 13;
            pic.Height = 110;
            pic.Location = new Point(145, locY);
            pic.Image = c_racing.Properties.Resources.cizgi;
            this.Controls.Add(pic);
            pic.BringToFront();
            pic.LocationChanged += handle;
        }

        // sağ ve solda çıkacak nesneler
        private void NesneGonder()
        {
            const int sleep = 20;
            Random rnd = new Random();
            int r = rnd.Next(1, 4);

            if (r == 1)
            {
                picCali.Visible = true;
                picCali.BringToFront();
                picCali.Location = new Point(4, 10);
                while (picCali.Location.Y < 480)
                {

                    picCali.Location = new Point(picCali.Location.X, picCali.Location.Y + 10);
                    Thread.Sleep(sleep);
                }
                picCali.Visible = false;
            }
            else if (r == 2)
            {
                picTabela.Visible = true;
                picTabela.BringToFront();
                picTabela.Location = new Point(4, 10);
                while (picTabela.Location.Y < 480)
                {
                    picTabela.Location = new Point(picTabela.Location.X, picTabela.Location.Y + 10);
                    Thread.Sleep(sleep);
                }
                picTabela.Visible = false;
            }
            else if (r == 3)
            {
                picCali.Visible = true;
                picCali.BringToFront();
                picCali.Location = new Point(340, 10);
                while (picCali.Location.Y < 480)
                {

                    picCali.Location = new Point(picCali.Location.X, picCali.Location.Y + 10);
                    Thread.Sleep(sleep);
                }
                picCali.Visible = false;
            }
            else if (r == 4)
            {
                picTabela.Visible = true;
                picTabela.BringToFront();
                picTabela.Location = new Point(340, 10);
                while (picTabela.Location.Y < 480)
                {
                    picTabela.Location = new Point(picTabela.Location.X, picTabela.Location.Y + 10);
                    Thread.Sleep(sleep);
                }
            }
            picTabela.Visible = false;
        } 
        #endregion

        #region BUTTON EVENTS
        // geri sayımı başlat
        private void btnBaslat_Click(object sender, EventArgs e)
        {
            btnDurdur.Enabled = true;
            btnBaslat.Enabled = false;
            tmrStart.Start();
        }

        // oyunu durdur be kontrolleri sıfırla
        private void btnDurdur_Click(object sender, EventArgs e)
        {
            start = 3;
            this.Controls.Find("pic1", true)[0].Dispose();
            this.Controls.Find("pic2", true)[0].Dispose();
            this.Controls.Find("pic3", true)[0].Dispose();
            this.Controls.Find("pic4", true)[0].Dispose();
            picAraba.Visible = false;
            lblBaslik.Visible = true;
            btnBaslat.Enabled = true;
            btnDurdur.Enabled = false;
            tmrCizgi.Stop();
        } 
        #endregion

        #region EVENTHANDLER
        // otoyol çizgileri başa sarmak için eventhandler
        private void pic_LocationChanged(object sender, EventArgs e)
        {
            PictureBox a = (PictureBox)sender;
            {
                if (a.Location.Y > 480)
                    a.Location = new Point(a.Location.X, -110);

            }
        } 
        #endregion

        #region TIMERLAR
        // otoyol çizgilerini göster
        private void tmrCizgi_Tick(object sender, EventArgs e)
        {
            for (int i = 0; i < this.Controls.Count; i++)
            {
                if (this.Controls[i].Name == "pic1")
                {
                    PictureBox control1 = this.Controls[i] as PictureBox;
                    control1.Location = new Point(178, control1.Location.Y + 10);
                    break;
                }
            }

            for (int i = 0; i < this.Controls.Count; i++)
            {
                if (this.Controls[i].Name == "pic2")
                {
                    PictureBox control2 = this.Controls[i] as PictureBox;
                    control2.Location = new Point(178, control2.Location.Y + 10);
                    break;
                }
            }

            for (int i = 0; i < this.Controls.Count; i++)
            {
                if (this.Controls[i].Name == "pic3")
                {
                    PictureBox control3 = this.Controls[i] as PictureBox;
                    control3.Location = new Point(178, control3.Location.Y + 10);
                    break;
                }
            }

            for (int i = 0; i < this.Controls.Count; i++)
            {
                if (this.Controls[i].Name == "pic4")
                {
                    PictureBox control4 = this.Controls[i] as PictureBox;
                    control4.Location = new Point(178, control4.Location.Y + 10);
                    break;
                }
            }
        }

        // oyunu başlat
        private void tmrStart_Tick(object sender, EventArgs e)
        {
            lblSayac.Text = start.ToString();
            lblSayac.Visible = true;
            start--;

            if (start < 0)
            {
                CizgiOlustur("pic1", -50, pic_LocationChanged);
                CizgiOlustur("pic2", 100, pic_LocationChanged);
                CizgiOlustur("pic3", 250, pic_LocationChanged);
                CizgiOlustur("pic4", 400, pic_LocationChanged);

                basladi = true;
                picAraba.BringToFront();
                picAraba.Visible = true;
                btnDurdur.Enabled = true;
                btnBaslat.Enabled = false;
                tmrCizgi.Interval = 10;
                tmrCizgi.Start();
                //tmrNesne.Start();
                tmrNesneHareket.Start();
                lblBaslik.Visible = false;
                lblSayac.Visible = false;
                tmrStart.Stop();
            }

        }

        // nesneler için bg workeri zamanla
        private void tmrNesneHareket_Tick(object sender, EventArgs e)
        {
            try
            {
                bgWorkerNesne.RunWorkerAsync();

            }
            catch { }
        } 
        #endregion

        #region BG WORKER
        // sağa ve sola dönüş için bg worker
        private void bgWorkerDonus_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            Dondur();
        }

        // sağdan ve soldan çıkacak nesneler için bg worker
        private void bgWorkerNesne_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            NesneGonder();
        } 
        #endregion
    }
}

[/spoiler]

 

Proje:

https://yadi.sk/d/Jua8R1hWg7Juu
Link to comment
Share on other sites

  • Editor

CisgiGoster fonksiyonundaki this.Controls leri Panel1.Controls yapın 

birde çizgileri çizen timerdaki this controls ler var onlarıda aynı şekilde Panel1 yapın.

 

Cizginin oluşturuldugu fonksiyonda bringfront değilde sendtoback yapın çizginin üxtüne gelecektir

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Similar Content

    • By melihasliyuksek
      Herkese merhabalar tnctr ailesi uzun zamandır foruma girmiyordum bu aralar sıkıntıdan dolayı yine buralardayım .Öncelikle çoğu OEM bilgisayar keyleri bu sürümde olduğu için Home SL yi seçtim ayrıca en temizi.Bu sistemi kendim için yapmıştım ama 3 gündür gerçek, 2 makinede biri oyun birisi ofis bilgisayarına kurdum ve gayet stabil yapısı bozulmayan orjinaline bayağı sadık ama orijinal gibi gereksiz tonla ıvır zıvır bulundurmayan bir kalıptır.Orijinal Windows 10 kalıbı üzerinde oynadım.NTLite ile yaptım çalışmayı şeffaf olsun diye değişiklerin hepsi oturum olarak gözüküyor silmedim iso dosyasından bakabilir ve hatalarımı söyleyebilirsiniz. Dism yüklemeyi unuttum pc ye internette gitti şansa güncellemeyi ntlite dan eklediğim için boyut biraz fazla esd sıkıştırma da yapmadım ama upload ettik bir şekilde  
      İNDİRME LİNKİ:
       
       
      Yaptığım Değişiklikler:
      -DOSYA PAYLAŞIM DESTEĞİ
      -OFFICE
      -YAZI TİPLERİ
      -SPOTIFY,NETFLIX 
      -MAĞAZADAN SONRADAN YÜKLENEN UYGULAMALAR ve bir kaç bileşen devre dışıdır.
      -Edgeyi kaldırmadım duruyor.
      -Defender tamamen silinmiştir çok gereksiz bulduğum bir programdı zaten.
      -Gereksiz bulduğum metro uygulamalarını kaldırdım kendim kullandığım uygulamaları bıraktım Xbox özellikle duruyor yoksa bazı oyunları açamazsınız.Mağaza kesinlikle sıkıntısız bir şekilde duruyor ve çalışıyor.
      -Net 3.5 ve 4.8,DirectPlay açık bir şekilde gelir.
      -Masaüstü simgeleri otomatik gelir.
      -UAC sormayacak şekilde ayarlanmıştır.
      -Onedrive kapalı.
      -Telemetry,Windows 10 ile ilgili bilgi kalite vs vs toplamalarını hepsini kapattım Microsoftun alabileceği bir bilgi toplaması bırakmadım.Gözümden kaçmış olabilir belki.
      -Yazdırma ve yazıcı ile ilgili olan hiçbir şeye dokunmadım yazıcısı olana sıkıntı çıkarıyor.
      -Cortana silinmiştir sistemden zaten Türkçe desteklemiyor.
      -Gereksiz bulduğum hizmetler genelde şirket ağlarında kullanılan veya uzak masaüstü ile ilgili olanları kapattım.İhtiyacı olan açabilir.
      -2-3 tane net 3.5-4.8 ile ilgili güncelleme çıkıyor onun dışında günceldir.
      -Sürücülere dokunmadım hepsi duruyor zaten inf boyutları çok ufak.
      -Smartscreen kapalı.
      -Bazı reg ayarları ve performans ayarları yaptım hiçbir şeyi bozmuyor kullanımda.
      -Sistem 14 gb olarak kuruluyor.
      Dediğim gibi sistem stabil,orijinaline sadık ve 3 günlük testime göre hatasız bir sistemdir.Sorun çıkarsa bana yazınız lütfen çalışmalarım sorunsuz ve işe yarar olursa yapmaya devam ederim.İyi günler hayırlı ramazanlar.
      https://hizliresim.com/MzqZDm
      https://hizliresim.com/eTPmcn
      https://hizliresim.com/MzqZDm
      https://hizliresim.com/TwuQrI
      https://hizliresim.com/kcLRRP
       
       
       



    • By seysel523
      Merhabalar,
      1)Sabit diski bölsek ya da bölmesek  oyun için fayda eder mi ve ya etmez mi? performansta bir artış yaşama ihtimalimiz olur mu?
      2)Oyunu işletim sistemiyle aynı diske kurmak ya da kurmamak? performans anlamında birşey ifade eder mi?
    • By galasonic
      Merhabalar, Android platformu için basit ve zorlu bir hafıza oyunu geliştirdik. Oyunda sayıları aklınızda tutmanız ve doğru sırayla tahmin etmeniz gerekiyor. Oynanışı son derece basit ancak bölümleri geçmek için biraz zorlanıyorsunuz. Oyunda minimal tarz grafikler kullanılmıştır. Oyunun adını Four Number olarak belirledik ve tüm tasarımlar tamamıyla bize ait. Sesler free olarak kullanılmıştır.
      Oyun Özellikleri;
      Basit oynanış Sonsuz oyun modu Online skor sistemi Ücretsiz Oyun linki; https://play.google.com/store/apps/details?id=com.doughgameart.fournumber
      Yerli yapım olarak geliştirdiğimiz oyunumuza desteklerinizi esirgemezseniz seviniriz. Şimdiden teşekkürler


    • By hitman47
      Merhaba arkadaşlar,
      2004 yılında üniversite öğrencisi iken oynadığım bir strateji oyununu arıyorum. Savaş Strateji oyunu. Oyunun ismini bilemediğim için sizden yardım istiyorum. Oyunu tarif edecek olursam;
      Oyunda Avrupa ve Türkiye haritası vardı. Orduyu dikdörtgen şeklinde konumlandırabiliyorduk savaş anında. Dolayısıyla en iyi taktik turan taktiği oluyordu  Oyunun tek hatırladığım ayrıntısı bu. yardımcı olabilireniz çok sevinirim.
    • By mogokce
      Merhabalar arkadaşlar aşağıdaki linkte çeşitli screenshotlarını göreceğiniz lünapark yapma simülatörü Theme Park oyununu arıyorum. Bulma ihtimalim var mı? Yardıcı olabilecek biri var mı?
      http://www.lostentertainment.org/2014/02/gaming-theme-park.html
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...