• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C# zdaenia onKeyDown/Up

Object Storage Arubacloud
0 głosów
192 wizyt
pytanie zadane 24 sierpnia 2017 w C# przez Paweł Nąckiewicz Nałogowiec (48,990 p.)

Witam ponownie.

Mam problem stworzyłem grę typu Arkanoid w C# problem polega na tym, że mam 3 timery (1 dla obsługi piłki (zbijanie klocków ruch pilki etc), 2. i 3. dla ruchu paletką w lewo i prawo). Przy wygranej lub przegranej na ekranie wyświetla się button i przy nim zaczynają się kłopoty.

 

Załóżmy że wygrywamy lub przegramy wyskakuje ten sam button ale z inna odpowiednia treścią.

Po kliknięciu na niego powinno nam zresetować rozgrywkę co teoretycznie robi z jednym małym ale.

Przy nowej rozgrywce nie można już sterować paletką (zdarzenie OnKeyDown/Up nie reagują.

W czym może tkwić problem?

 

Fragmenty kodu


//KeyUP

 private void Form1_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Right) r_timer.Enabled = false; //r_timer =right timer
            if (e.KeyCode == Keys.Left) l_timer.Enabled = false;
        }

//KeyDOWN

 private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Right) r_timer.Enabled = true;
            if (e.KeyCode == Keys.Left) l_timer.Enabled = true;
        }

//Przycisk do resetu gry
private void new_game_btn_Click(object sender, EventArgs e)
        {
            //pozycja pilki
            ball_img.Top = 50;                          
            ball_img.Left = 50;
            ball_img.Visible = true;
            //wprawienie w ruch pilki
            x = -8; y = -8;
            
            ball_timer.Enabled = true;
            new_game_btn.Visible = false;
            to_win = 16;
       
            //przywrocenie bloczkow '
            brick1.Visible = true; brick5.Visible = true; brick9.Visible = true; brick13.Visible = true;
            brick2.Visible = true; brick6.Visible = true; brick10.Visible = true; brick14.Visible = true;
            brick3.Visible = true; brick7.Visible = true; brick11.Visible = true; brick15.Visible = true;
            brick4.Visible = true; brick8.Visible = true; brick12.Visible = true; brick16.Visible = true;
            
       }

 

komentarz 24 sierpnia 2017 przez piotrsz109 Stary wyjadacz (13,730 p.)
Pokaż cały kod.
komentarz 24 sierpnia 2017 przez Paweł Nąckiewicz Nałogowiec (48,990 p.)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Arkanoid
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent(); 
        }

        bool kolizja(PictureBox imgBall,PictureBox imgBrick)
        {
            if (imgBall.Left >= imgBrick.Left - imgBall.Width &&
               imgBall.Left <= imgBrick.Left + imgBrick.Width &&
               imgBall.Top >= imgBrick.Top - imgBall.Height &&
               imgBall.Top <= imgBrick.Top + imgBrick.Height)
            {
                return true;
            }
            else return false;
        }

        int x = -8,y=-8,to_win=16;

        private void ball_timer_Tick(object sender, EventArgs e)
        {
            ball_img.Left += x;
            ball_img.Top += y;
            //odbijanie od lewej sciany
            if ((ball_img.Left - 5) <= tlo_img.Left) x = -x;
            //odbijanie od gornej sciany
            if ((ball_img.Top - 5) <= tlo_img.Top) y = -y;
            //odbijanie od prawej sciany
            if ((ball_img.Left + ball_img.Width+5) >= tlo_img.Width) x = -x;
            //skucha
            if(ball_img.Top>=paddle_img.Top+paddle_img.Height+15)
            {
                ball_timer.Enabled = false;
                ball_img.Visible = false;
                new_game_btn.Text = "Skucha! Jeszcze raz?";
                new_game_btn.Visible = true;
            }
            else if (ball_img.Left>paddle_img.Left-(ball_img.Width/2)&&ball_img.Left<paddle_img.Left+paddle_img.Width&&ball_img.Top+ball_img.Height>paddle_img.Top)
            {
                if (y > 0) y = -y;
            }
            if (to_win <= 0)
            {
                ball_timer.Enabled = false;
                ball_img.Visible = false;
                new_game_btn.Text = "Wygrana! Jeszcze raz?";
                new_game_btn.Visible = true;
            }

            //blok1
            if (kolizja(ball_img,brick1) && brick1.Visible==true)
            {
                x = -x;
                y = -y;
                brick1.Visible = false;
                to_win--;
            }
            //blok2
            if (kolizja(ball_img, brick2) && brick2.Visible == true)
            {
                x = -x;
                y = -y;
                brick2.Visible = false;
                to_win--;
            }
            //blok3
            if (kolizja(ball_img, brick3) && brick3.Visible == true)
            {
                x = -x;
                y = -y;
                brick3.Visible = false;
                to_win--;
            }
            //blok4
            if (kolizja(ball_img, brick4) && brick4.Visible == true)
            {
                x = -x;
                y = -y;
                brick4.Visible = false;
                to_win --;
            }
            //blok5
            if (kolizja(ball_img, brick5) && brick5.Visible == true)
            {
                x = -x;
                y = -y;
                brick5.Visible = false;
                to_win--;
            }
            //blok6
            if (kolizja(ball_img, brick6) && brick6.Visible == true)
            {
                x = -x;
                y = -y;
                brick6.Visible = false;
                to_win--;
            }
            //blok7
            if (kolizja(ball_img, brick7) && brick7.Visible == true)
            {
                x = -x;
                y = -y;
                brick7.Visible = false;
                to_win--;
            }
            //blok8
            if (kolizja(ball_img, brick8) && brick8.Visible == true)
            {
                x = -x;
                y = -y;
                brick8.Visible = false;
                to_win--;
            }
            //blok9
            if (kolizja(ball_img, brick9) && brick9.Visible == true)
            {
                x = -x;
                y = -y;
                brick9.Visible = false;
                to_win--;
            }
            //blok10
            if (kolizja(ball_img, brick10) && brick10.Visible == true)
            {
                x = -x;
                y = -y;
                brick10.Visible = false;
                to_win --;
            }
            //blok11
            if (kolizja(ball_img, brick11) && brick11.Visible == true)
            {
                x = -x;
                y = -y;
                brick11.Visible = false;
                to_win--;
            }
            //blok12
            if (kolizja(ball_img, brick12) && brick12.Visible == true)
            {
                x = -x;
                y = -y;
                brick12.Visible = false;
                to_win--;
            }
            //blok13
            if (kolizja(ball_img, brick13) && brick13.Visible == true)
            {
                x = -x;
                y = -y;
                brick13.Visible = false;
                to_win--;
            }
            //blok14
            if (kolizja(ball_img, brick14) && brick14.Visible == true)
            {
                x = -x;
                y = -y;
                brick14.Visible = false;
                to_win--;
            }
            //blok15
            if (kolizja(ball_img, brick15) && brick15.Visible == true)
            {
                x = -x;
                y = -y;
                brick15.Visible = false;
                to_win--;
            }
            //blok16
            if (kolizja(ball_img, brick16) && brick16.Visible == true)
            {
                x = -x;
                y = -y;
                brick16.Visible = false;
                to_win--;
            }
        }

        private void l_timer_Tick(object sender, EventArgs e)
        {
           if(paddle_img.Left>10) paddle_img.Left -= 10;
        }
        private void r_timer_Tick(object sender, EventArgs e)
        {
            if(paddle_img.Left+paddle_img.Width<tlo_img.Width-10) paddle_img.Left += 10;
        }

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

        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Right) r_timer.Enabled = true;
            if (e.KeyCode == Keys.Left) l_timer.Enabled = true;
        }

        private void new_game_btn_Click(object sender, EventArgs e)
        {
            //pozycja pilki
            ball_img.Top = 50;
            ball_img.Left = 50;
            ball_img.Visible = true;
            //wprawienie w ruch pilki
            x = -8; y = -8;
            
            ball_timer.Enabled = true;
            new_game_btn.Visible = false;
            to_win = 16;
       
            //przywrocenie bloczkow '
            brick1.Visible = true; brick5.Visible = true; brick9.Visible = true; brick13.Visible = true;
            brick2.Visible = true; brick6.Visible = true; brick10.Visible = true; brick14.Visible = true;
            brick3.Visible = true; brick7.Visible = true; brick11.Visible = true; brick15.Visible = true;
            brick4.Visible = true; brick8.Visible = true; brick12.Visible = true; brick16.Visible = true;
            
       }

        private void Form1_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Right) r_timer.Enabled = false; //r_timer =right timer
            if (e.KeyCode == Keys.Left) l_timer.Enabled = false;
        }

    

        private void Form1_Load(object sender, EventArgs e)
        {

        }
    }
}

 

komentarz 27 sierpnia 2017 przez michal_kopaczewski Nowicjusz (210 p.)
Po pierwsze klocki generuj z aplikacji i wpisz je w tablice. Przy sprawdzaniu kolizji z ponad 100 linijek zrobisz 5. Sprawdzałeś czy program w ogóle nie wchodzi w eventy keyup/keydown? (postaw kropke debuggera na pierwszym ifie i sprawdz czy sie zatrzyma)

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 161 wizyt
0 głosów
1 odpowiedź 154 wizyt
pytanie zadane 31 maja 2022 w C# przez Routa Nowicjusz (160 p.)
0 głosów
1 odpowiedź 1,605 wizyt
pytanie zadane 14 sierpnia 2017 w Offtop przez chmod96 Obywatel (1,380 p.)

92,568 zapytań

141,420 odpowiedzi

319,617 komentarzy

61,953 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...