beyisoy
Aktif Üye
- Mesajlar
- 281
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)
{
}
}
}
}