none
¿Se puede crear un contador sin timers? RRS feed

  • Pregunta

  • Hola, soy estudiante y para mi proyecto final de programación II (apenas estoy aprendiendo) estoy creando un juego que cociste en un personaje que camina solo de derecha a izquierda para evitar objetos que caen.

    Tengo dos ventanas(Menú y donde se juega) y dos clases(Velociraptor y Meteorito)

    • El problema que tengo es que al usar el teclado los timers se detienen, por lo que me preguntaba si hay manera de solucionar esto sin timers.  (para los objetos que caen (use 2 timers) y para el tiempo transcurrido (use 2 timers) y para que el gif del personaje se vea caminando (use 1 timer)....Aun que por ahora el personaje se mueve solo por la posición del mouse en el eje x.
    • Mis colisiones no funcionan.


    No se si podrían ayudar o darme consejos para solucionar esto, muchas gracias!

    //Clase de la ventana donde se juega
    
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using WMPLib;
    
    namespace Survival
    {
        public partial class fMain : Form
        {
            int score, lives, time;
            WMPLib.WindowsMediaPlayer wgun = new WMPLib.WindowsMediaPlayer();
            List<Meteorito> conjunto;
            int vidam = 0;
           // int vidaV = 100;
            private static readonly Random random = new Random();
           
           
           
    
            public fMain()
            {
                conjunto = new List<Meteorito>();
                InitializeComponent();
    
                gameTimer.Interval = 1000 / 4;
                gameTimer.Tick += new EventHandler(Update);
                gameTimer.Start();
                StartGame();
            
            }
           
            //Se crea el personaje
            Velociraptor personaje = new Velociraptor(350, 450);
           
           
            
                //METODO PARA DETECTAR COLISIONES(no funciona)
          
    /*
            bool detectCollision(int px, int py)
            {
                
    
    
                
                int miaumeowRight = px + Velociraptor.MIAUMEOW_WIDTH;
                int miaumeowDown = py + Velociraptor.MIAUMEOW_HEIGHT;
    
                int meteoritoRight = px + Meteorito.METEORITO_WIDTH;
                int meteoritoDown = py + Meteorito.METEORITO_HEIGHT;
                
                foreach (Control ctrl in this.Controls)    // ???
                {
                    if (px < meteoritoRight & miaumeowRight > ctrl.Location.X &
                        py < meteoritoDown & meteoritoDown > ctrl.Location.Y)
                        return true;
                }
                 
                 return false;
                    
                }
                */
            private void Update(object sender, EventArgs e)
            {
                labelVidas.Text = "Vidas: " + lives.ToString();
                labelPuntos.Text = "Puntos: " + score.ToString();
            }
    
            private void StartGame()
            {
                score = 0;
                lives = 3;
                time = 1;
    
                tiempo.Interval = 1000;
                tiempo.Tick += new EventHandler(ActualizarTiempo);
            }
    
            private void ActualizarTiempo(object sender, EventArgs e)
            {
                if (time > 0)
                    time += 1;
                int tiempoSegundos = time;
                labelTiempo.Text = "Tiempo: " + tiempoSegundos.ToString();
            }
            private void Form1_Load(object sender, EventArgs e)
            {
    
            }
            //se pinta el velociraptor, meteoritos
            private void Form1_Paint(object sender, PaintEventArgs e)
            {
                Graphics g = e.Graphics;
                personaje.draw(g);
               
                foreach (Meteorito b in conjunto)
                    b.draw(g);
    
                for (int i = 0; i < conjunto.Count; i++)
                {
                    if (conjunto[i].colision(Cursor.Position.X - 425, 450))
                    {
                        conjunto.RemoveAt(i);
                        break;
                    }
                    
    
                }
                 
            }
          
            private void cronometroCreacion_Tick(object sender, EventArgs e)
            {
    
                int ancho = this.Width;
                conjunto.Add(new Meteorito(random.Next(ancho), 0));
                
            }
    //como se movera el meteorito
            private void cronometroMueve_Tick(object sender, EventArgs e)
            {
                vidam += 20;
                if (vidam == 1400)
                {
                    int ancho = this.Width;
                    conjunto.Add(new Meteorito(random.Next(ancho), 0));
                    vidam = 0;
                }
                foreach (Meteorito b in conjunto)
                {
                    b.fall();  //movemos cada bloque
                    
                    this.Invalidate();
                }
    
            }
    
            private void buttonVidas_Click(object sender, EventArgs e)
            {
                if (lives > 0)
                    lives--;
            }
    
            private void buttonPuntos_Click(object sender, EventArgs e)
            {
                score += 10;
            }
    
            private void labelTiempo_Click(object sender, EventArgs e)
            {
    
            }
    
            
      
        }
    }
    
    

    //Clase de los objetos que caen  ***con timer***
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace Survival
    {
        class Meteorito
        {
            private int posX;
            private int posY;
            private Bitmap image;
    
            public const int METEORITO_WIDTH = 56; //Dimensiones de la imagen 
            public const int METEORITO_HEIGHT = 119;
    
            public Meteorito()
            {
                Random r = new Random();
                posX = r.Next(0,700);
                posY = 0;
                String filePath = Application.StartupPath + @"\images\";
                filePath += @"meteorito" + ".gif";
                image = new Bitmap(filePath);
            }
    
             public Meteorito(int nx, int ny)
            {
                posX = nx;
                posY = ny;
                String filePath = Application.StartupPath + @"\images\";
                filePath += @"meteorito" + ".gif";
                image = new Bitmap(filePath);
             }
             public int PosX
             {
                 get
                 {
                     return posX;
                 }
                 set
                 {
                     posX = value;
                 }
             }
    
             public int PosY
             {
                 get
                 {
                     return posY;
                 }
                 set
                 {
                     posY = value;
                 }
             }
    
             public void fall()
             {
                posY+=4;
             }
            
             public void draw(Graphics g)
             {
    
                 String filePath = Application.StartupPath + @"\images\";
    
                 
                 filePath += @"meteorito" + ".gif";
                 image = new Bitmap(filePath);
                 g.DrawImage(image, new Point(posX, posY));
             }
    
             public void mueve(int w, int h)
             {
                 Random r = new Random();
                 PosX += r.Next(-10, 10);
                 for(int i= 0; i> 700; i+=3)
    
                     posY += i;
                 
    
                 if (posX < 0 || PosX > w)
                     PosX = r.Next(0, w);
    
                 if (posY < 0 || PosY > h)
                     PosY = r.Next(0, h);
             }
    
    //NO ESTOY MUY SEGURA si los public bool van en las clases del personaje y el objeto o en la clase de la ventana donde se juega.
    
    
             public bool colision(int mx, int my)
             {
                 int miaumeowRight = mx + Velociraptor.MIAUMEOW_WIDTH;
                 int miaumeowDown = my + Velociraptor.MIAUMEOW_HEIGHT;
    
                 int meteoritoRight = mx + Meteorito.METEORITO_WIDTH;
                 int meteoritoDown = my + Meteorito.METEORITO_HEIGHT;
    
                 if ((miaumeowRight <= mx && mx <= (meteoritoRight))
                     && (miaumeowDown <= my && my <= (meteoritoDown)))
                     return true;
                 else
                     return false;
             }
         
        }
    }
    

    domingo, 27 de abril de 2014 22:26