C# Arduino Joystick ile Uçak Oyunu

Kodla Büyü

beyisoy

Seçkin Üye
Seçkin Üye
Mesajlar
275
arduino_joystick_ucak_oyunu.jpg

Daha önce C# Uçak Savaşı Oyunu projesini yapmıştık şimdi proje üzerinde biraz değişiklik yaparak işin içine Arduino Joystick Kullanımını katıyoruz yani uçağımızın yönlendirme ve ateş etme fonksiyonlarını Joystick ile gerçekleştireceğiz, kodlar ...:
https://www.bilisimogretmeni.com/visual-studio-c/c-arduino-joystick-ile-ucak-oyunu.html
Kod:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Ucak_Savasi
{
    public partial class Form1 : Form
    {
        int solHareket = 0;
        int ducakHareketHiz = 3;
        Random rnd = new Random();
        int mermiHiz = 8;   
        bool ates = false;
        int Puan = 0;       
        SerialPort sPort; //SerialPort nesnemizi oluşturuyoruz.
        public Form1()
        {
            InitializeComponent();
            ducak1.Top = -500;
            ducak2.Top = -900;
            ducak3.Top = -1300;
            mermi.Top = -100;
            mermi.Left = -100;
            sPort = new SerialPort();
            sPort.BaudRate = 9600; //oluşturulan nesnenin haberleşme hızını ayarlıyoruz

        }

        private void ducak1_Click(object sender, EventArgs e)
        {

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //https://www.bilisimogretmeni.com
            for (int i = 0; i < System.IO.Ports.SerialPort.GetPortNames().Length; i++)
            {

                    toolStripComboBox1.Items.Add(System.IO.Ports.SerialPort.GetPortNames()[i]);
            }
        }

        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                timer1.Start();
            }
            if (e.KeyCode == Keys.P)
            {
                timer1.Stop();
            }

            if (e.KeyCode == Keys.Left)
            {
                if (bucak.Location.X < 0) { solHareket = 0; } else { solHareket =-5; }
            }
            else if (e.KeyCode == Keys.Right)
            {
                if (bucak.Location.X > 512)
                {
                    solHareket = 0;
                }
                else
                {
                    solHareket = 5;
                }
            }
            else if (e.KeyCode == Keys.Space)
            {

                if (ates == false)
                {
                    mermiHiz = 8;
                    mermi.Left = bucak.Left+40;
                    mermi.Top = bucak.Top;
                    ates = true;
                }
            }

        }

        private void Form1_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Left)
            {
                solHareket = 0;
            }
            else if (e.KeyCode == Keys.Right)
            {
                solHareket = 0;
            }
        }//https://www.bilisimogretmeni.com
        private void timer1_Tick(object sender, EventArgs e)
        {
            bucak.Left += solHareket;
            mermi.Top -= mermiHiz;
            ducak1.Top += ducakHareketHiz;
            ducak2.Top += ducakHareketHiz;
            ducak3.Top += ducakHareketHiz;
            lblsonuc.Text = "" + Puan;
            if (ducak1.Top >= 660 || ducak2.Top >= 660 || ducak3.Top >= 660)
            {
                oyunSonu();

            }
            if (ates && mermi.Top < 0)
            {
                ates = false;
                mermiHiz = 0;
                mermi.Top = -100;
                mermi.Left = -100;
            }
            Vurulma();
        }

        private void oyunSonu()
        {           
                timer1.Enabled = false;
                MessageBox.Show(Puan + " Puan Kazandınız....", "Uçak Oyunu V1.0 www.bilisimogretmeni.com", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                Puan = 0;
                lblsonuc.Text = "0";
                ducak1.Top = -500;
                ducak2.Top = -900;
                ducak3.Top = -1300;
                mermi.Top = -100;
                mermi.Left = -100;
                timer1.Enabled = true;
        }

        private void Vurulma()
        {
            if (mermi.Bounds.IntersectsWith(ducak1.Bounds))
            {
                Puan += 1;
                ducak1.Top = -500;
                int ranP = rnd.Next(1, 300);
                ducak1.Left = ranP;
                ates = false;
                mermiHiz = 0;
                mermi.Top = -100;
                mermi.Left = -100;
                //https://www.bilisimogretmeni.com

            }
            else if (mermi.Bounds.IntersectsWith(ducak2.Bounds))
            {
                Puan += 1;
                ducak2.Top = -900;
                int ranP = rnd.Next(1, 400);
                ducak2.Left = ranP;
                ates = false;
                mermiHiz = 0;
                mermi.Top = -100;
                mermi.Left = -100;

            }
            else if (mermi.Bounds.IntersectsWith(ducak3.Bounds))
            {
                Puan += 1;
                ducak3.Top = -1300;
                int ranP = rnd.Next(1, 500);
                ducak3.Left = ranP;
                ates = false;
                mermiHiz = 0;
                mermi.Top = -100;
                mermi.Left = -100;

            }

        }

        private void label2_Click(object sender, EventArgs e)
        {

        }

        private void toolStripComboBox1_Click(object sender, EventArgs e)
        {
        
        }

        private void toolStripComboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {         
          
            try
            {
                sPort.PortName = toolStripComboBox1.Text; //txtPort içerisindeki değeri seri port ismimize atıyoruz. İkiside string, convert'e gerek yok.
                if (!sPort.IsOpen) //şart sağlanıyorsa seri port açılarak aşağıdaki işlemler gerçekleşiyor
                {
                    sPort.Open();
                    toolStripTextBox1.Text= "Bağlantı Kuruldu";
                    toolStripTextBox1.ForeColor = Color.Green;
                    timer2.Start(); //timerı başlatıyoruz

                }//https://www.bilisimogretmeni.com
            }
            catch (Exception) //herhangi bir hataya karşı try/catch bloğunu kullanıyoruz
            {
                toolStripTextBox1.Text = "Bağlantı Kurulamadı";
                toolStripTextBox1.ForeColor = Color.Red;
            }
        }

        private void klavyeToolStripMenuItem_Click(object sender, EventArgs e)
        {
          

        }
        
        private void timer2_Tick(object sender, EventArgs e)
        {
            try
            {
                
                string sonuc = sPort.ReadLine();
                string[] pot = sonuc.Split('*');               
                int x, b;
                x = Convert.ToInt32(pot[0]);
                b = Convert.ToInt32(pot[1]);
                if (x < 505)                   
                {
                    
                    if (bucak.Location.X <= 0) { solHareket = 0; } else { solHareket = -5; }
                }
                else if (x> 520)
                {
                  
                    if (bucak.Location.X >= 512)
                    {
                        solHareket = 0;
                    }
                    else
                    {
                        solHareket = 5;
                    }
                }//https://www.bilisimogretmeni.com                             
                else if (b==1)
                {

                    if (ates == false)
                    {
                        mermiHiz = 8;
                        mermi.Left = bucak.Left + 40;
                        mermi.Top = bucak.Top;
                        ates = true;
                    }
                }
                else { solHareket = 0; }
                sPort.DiscardInBuffer();
                System.Threading.Thread.Sleep(60);

            }
            catch (Exception)
            {

            }
        }
    }
}
 
Geri
Üst