Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: Bắt sự kiện bàn phím trong lập trình C#

  1. #1
    Ngày gia nhập
    10 2008
    Bài viết
    3

    Mặc định Bắt sự kiện bàn phím trong lập trình C#

    Chào các bạn,mình đang làm bài bắn tàu.Mình có một vấn đề không giải quyết được.Cụ thể là điểu khiển ụ súng,khi mình nhấn phím Left và right để di chuyển nòng súng sang phải và trái.(nút space dc mình chọn là nút bắn đạn).Khi mình giữ phím left và lúc mình nhấn phím space thì nòng súng ngừng lại và mình phải thả nút left ra và nhấn lại nó mới di chuyển.Cho hỏi làm thế nào mà khi đang giữ phím left mà đồng thời mình cũng nhấn nút space thì nòng súng vẫn di chuyển bình thường.
    Mình viết bài này trên c#.
    Đây là đường link ( chỉ mới là phần vẽ và cho di chuyển nòng súng thui )
    http://mega.1280.com/file/FMIWAQO7/

    // đoạn code này là file form.cs
    Code:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    
    namespace Ban_tau
    {
        public partial class Ban_tau : Form
        {
            private Gun gun = new Gun();
            public Ban_tau()
            {
                InitializeComponent();
                
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                
            }
    
            private void Ban_tau_Paint(object sender, PaintEventArgs e)
            {
                gun.Draw_Gun_emplacement(e,move);
            }
    
            float move = 0;
            private void Ban_tau_KeyDown(object sender, KeyEventArgs e)
            {   
                if (e.KeyCode == Keys.Right)
                    move+=2;
                if (e.KeyCode == Keys.Left)
                    move-=2;
                this.Invalidate();
            }
        }
    }
    // đoạn code này là mô tả class Gun
    Code:
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Drawing;
    using System.Drawing.Drawing2D;
    using System.Windows.Forms;
    
    namespace Ban_tau
    {
        class Gun
        {
            public void Draw_Gun_emplacement(PaintEventArgs e,float move)
            {
                GraphicsPath path1 = new GraphicsPath();
                Rectangle r = new Rectangle(250,360,100,100);
    
                // vẽ nửa đường tròn lớn
                path1.AddArc(r, 180, 180);
                path1.AddLine(250, 410, 300, 410);
                Graphics g = e.Graphics;
                g.DrawPath(Pens.Black, path1);
                g.FillPath(Brushes.Black, path1);
                // vẽ nửa đường tròn lớn
    
                GraphicsPath path2 = new GraphicsPath();
                path2.AddArc(new Rectangle(270, 380, 15, 15), 0, 360);
                g.FillPath(Brushes.WhiteSmoke, path2);
    
                //Vẽ nòng súng 
                g.TranslateTransform(300, 410);
                g.RotateTransform(move);
                Point[] polygon = new Point[4];
                polygon[0] = new Point(-5, -100); polygon[1] = new Point(5, -100); polygon[2] = new Point(5, 0); polygon[3] = new Point(-5, 0);
                g.DrawPolygon(Pens.Red, polygon);
                
    
            }  
        
        }
    }
    Đã được chỉnh sửa lần cuối bởi tienuit : 20-05-2009 lúc 11:11 PM.

  2. #2
    Ngày gia nhập
    11 2008
    Bài viết
    15

    ý tưởng của mình:

    khi bạn nhấn left/right, chương trình sẽ có 1 biến lưu lại là keyleft/right đang nhấn. sẽ thực hiện việc di súng sang trái/phải. Khi phím space được nhấn, súng sẽ bắn mà nòng súng vẫn di chuyển.

    nhưng vấn đề là làm sao cho nòng súng dừng. Nó được giải quyết ở sự kiện keyUp. kiểm tra xem phím nào được up, nếu là phím đang được nhấn(phím mà biến ở trên lưu lại) thì nòng súng dừng.

  3. #3
    Ngày gia nhập
    11 2008
    Bài viết
    15

    float movecount = 0;
    Key keys = Key.Space;//chỉ là lính canh.
    private void Ban_tau_KeyDown(object sender, KeyEventArgs e)
    {
    if (e.KeyCode == Keys.Right)
    {movecount = 2; keys=e.KeyCode;}
    if (e.KeyCode == Keys.Left)
    {movecount = -2; keys = e.KeyCode
    if(e.KeyCode = Key."khoang trang" )
    //su kien ban
    this.Invalidate();
    }
    private void Ban_tau_KeyUp(object sender, KeyEventArgs e)
    {
    if (e.KeyCode == keys)
    movecount = 0;
    this.Invalidate();
    }
    Chú ý thêm sự kiện tick cho timer.
    Mình không rành C# nhưng ý tưởng là vậy. Bạn nào biết code hoàn chỉnh thì giúp cái nha.

  4. #4
    Ngày gia nhập
    09 2010
    Nơi ở
    Hải Phòng city
    Bài viết
    527

    Mặc định Bắt sự kiện bàn phím trong c#

    trong chương trình của mình không có sự nút tắt vì mình đã khóa chức năng close rùi
    mình muốn thoát chương trình băng nút ESC thì làm sao hả anh hai?

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn