Desarrollo de juegos II
Publicado: 28/08/2007 Archivado en: Uncategorized 13 Comentarios »Siguiendo con el post anterior, y esto del desarrollo de juegos. Ahora les traigo una pieza de código muy simple, creada en C#.
Este mini juego nació, como otros, para fin de año. Normalmente, todos los fines de año a modo de tarjeta navideña, en vez de enviar las tipicas postales por internet, me siento un rato y hago un mini juego. En esta ocasión, un Arkanoid.
Como ya dije, haciendo uso de C# y GDI+, nada del otro mundo, pero pasa por medianamente aceptable ![]()
using System.Drawing;
using System.Text;
using System.Windows.Forms;
{
public partial class Form1 : Form
{
const int _LengthX = 6;
const int _LengthY = 14;
private PictureBox picArka = new PictureBox();
private PictureBox picBall = new PictureBox();
private PictureBox[,] picBox = new PictureBox[_LengthX, _LengthY];
#endregion
private Timer oTimer = new Timer();
private int _posX = 1;
private int _posY = -1;
private int _Speed = 4;
private int _VelCounter = 0;
#endregion
{
InitializeComponent();
}
{
InitializeArray();
picArka.Image = oBitMap;
picArka.Visible = true;
picArka.Left = (this.Width / 2) – ((picArka.Width / 2) / 2);
picArka.Top = this.Height – picArka.Height;
picArka.Height = 15;
picArka.Width = 48;
picArka.MouseMove += new MouseEventHandler(pArka_MouseMove);
picBall.Image = oBallBitMap;
picBall.Visible = true;
picBall.Width = 8;
picBall.Height = 8;
picBall.Left = (this.Width / 2) – ((picBall.Width / 2) / 2);
picBall.Top = picArka.Top – picBall.Height;
oTimer.Enabled = true;
oTimer.Interval = 50;
this.Controls.Add(picArka);
}
private void MoveBall(object o, EventArgs e)
{
int xBallPosition = picBall.Top + picBall.Height;
int yBallPosition = picArka.Left + picArka.Width;
if (_VelCounter <= 500)
_VelCounter++;
//{
// case 500:
if (_VelCounter == 500)
_Speed += 3;
// break;
//case 1000:
// _Speed *= 2;
// break;
//}
picBall.Top += (_Speed * _posY);
&& (_posY == 1)
&& ((picBall.Left >= picArka.Left) && (picBall.Left <= yBallPosition)))
{
picBall.Top -= (_Speed * _posY);
_posY *= -1;
}
if (picBall.Top >= (picArka.Top + picArka.Height))
{
this.lblFinJuego.Visible = true;
picImagen.Visible = true;
oTimer.Enabled = false;
}
{
picBall.Top -= (_Speed * _posY);
_posY *= -1;
}
{
picBall.Left -= (_Speed * _posX);
_posX *= -1;
}
}
{
bool _blnEndGame = true;
{
for (int j = 0; j<=_LengthY – 1; j++)
{
if ((picBall.Top <= (picBox[i,j].Top + picBox[i,j].Height))
&& (picBall.Top >= picBox[i,j].Top)
&& (picBall.Left >= (picBox[i,j].Left))
&& ((picBall.Left + picBall.Width) <= (picBox[i,j].Left + picBox[i,j].Width))
)
{
if (picBox[i,j].Visible == true)
{
//_posX *= -1;
_posY *= -1;
intPoints += 10;
picBox[i,j].Visible = false;
}
}
if (picBox[i,j].Visible)
{
if (_blnEndGame)
{
_blnEndGame = !_blnEndGame;
}
}
}
}
{
this.lblFinJuego.Visible = true;
picImagen.Visible = true;
oTimer.Enabled = false;
}
}
{
Bitmap oBitMap = new Bitmap(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("Xmass.box.bmp"));
{
for (int j = 0; j<=_LengthY – 1; j++)
{
picBox[i,j] = new PictureBox();
picBox[i,j].Width = 17;
picBox[i,j].Height = 22;
picBox[i,j].Image = oBitMap;
picBox[i,j].Top = (i + 1) * 30;
picBox[i,j].Left = (j + 1) * 20;
}
}
}
{
int X = 0;
X = picArka.Left + e.X;
CalculatePosition(X);
}
{
base.OnMouseMove(e);
CalculatePosition(e.X);
}
private void CalculatePosition(int MouseX)
{
int X = 0;
X = MouseX – ((picArka.Width / 2) / 2);
picArka.Left = X;
}
}
}
Recordando el pasado. Desarrollo de juegos
Publicado: 27/08/2007 Archivado en: Uncategorized Deja un comentario »Estaba navegando un poco, sin saber que buscar, que mirar, o que hacer. Y encuentro, con sorpresa, un link un grupo de usuarios de Yahoo llamado CanalDiv. Grupo de usuario al que pertenecía hasta el momento en que de manera muy extraña, mi cuenta de correo de Yahoo, fue usurpada.
De cualquier manera (no quiero recordar ese hecho) lo que me asombro fue el haber olvidado que a este grupo, originalmente dedicado a la creación de juegos con un programa/lenguaje llamado DivStudio, había ido mutando, con el tiempo, en un grupo donde sus integrantes no solo usaban este (DivStudio) para desarrollar juegos, si no, que mas de uno había estado tratando de hacer algo mas. Mi caso, como no podía ser de otra manera
.
Desde muy chico, o por lo menos desde que recuerdo he estado un poco obsesionado con el desarrollo de juegos. Y por más que lo he intentado, nunca logre llegar muy lejos. Con algunos desarrollos muy simples, algún que otro Arkanoid, o un Invaders, o un PacMan, nunca logre alcanzar el punto de cocción para poder lanzar un juego comercial. (Lo que no quiere decir que no siga intentándolo)
Volviendo al tema principal, en este grupo encontré un ZIP que data del 17 de Febrero del 2003, donde había creado un ActiveX para ser usado en Visual Basic 6 (Preferentemente), para el desarrollo de juegos en 2 dimensiones. En realidad, lo que quería lograr era dar un contexto general de abstracción para el desarrollo fácil de juegos. En palabras entendibles, poner una capa mas arriba de DirectX y GDI+ para traducir un PutPixel en ColocarPixel, o un redimensionamiento de la pantalla con DirectX en un simple: CaptureMode RSWindowMode, Me.hWnd
En fin, el prototipo estaba listo, pero nunca vio la luz, como otros proyectos varios. Así que para recordar esto, un screenshot de la versión demo y su ventana avisando que lo es, y algunas líneas de código de la misma:
Me.GMGame1.Left = 0
‘Bloqueo del bucle
Me.GMGame1.SleepTime = 1
Me.Show
DoEvents
‘Inicializando Sonidos
Me.GMGame1.InitializeSound
Me.GMGame1.SoundDir App.Path & "sound"
Me.GMGame1.CreateBuffers "ir_begin.wav", 10
‘Inicializando Modo de Video
Me.GMGame1.CaptureMode RSWindowMode, Me.hWnd
‘Escondiendo el Mouse
‘ Me.GMGame1.HideMouse
Me.GMGame1.GraphicDir App.Path & "images"
Me.GMGame1.SetBuffer "backbuffer.bmp"
‘Cargando Graficos
Me.GMGame1.LoadSprite "WorldSmallCity1.bmp", 1
Me.GMGame1.LoadSprite "WorldSmallCity2.bmp", 2
Me.GMGame1.LoadSprite "test.bmp", 4
Me.GMGame1.LoadSprite "test2.bmp", 3
Me.GMGame1.LoadSprite "test3.bmp", 5
Me.GMGame1.LoadSprite "tipa.bmp", 6
Me.GMGame1.LoadSprite "sonic.bmp", 7
AlphaDirection = False

