Don`t starting function on timer tick
How can i push my function DrawMap and MoveGhost to work?
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 Tao.FreeGlut;
using Tao.OpenGl;
using Tao.Platform.Windows;
namespace Puck_Man
{
public partial class Form1 : Form
{
int[,] Map = new int[20,20];
void DrawWall(float Start_X, float Start_Y)
{
float
dx = 0.08f,
dy = 0.1f;
Gl.glColor3f(0, 0, 1);
Gl.glRectf(Start_X, Start_Y, Start_X + dx, Start_Y - dy);
Gl.glColor3f(0, 0.5f, 1);
Gl.glRectf(Start_X + 0.01f, Start_Y - 0.01f, Start_X + dx - 0.01f, Start_Y - dy + 0.01f);
}
void DrawPointScore(float Start_X, float Start_Y)
{
Gl.glEnable(Gl.GL_POINT_SMOOTH);
float
dx = 0.08f,
dy = 0.1f,
PacX = Start_X + dx / 2,
PacY = Start_Y - dy / 2;
Gl.glColor3f(1, 1, 1);
Gl.glPointSize(8);
Gl.glBegin(Gl.GL_POINTS);
Gl.glVertex2f(PacX, PacY);
Gl.glEnd();
}
void DrawGhost(float X, float Y)
{
Gl.glEnable(Gl.GL_POINT_SMOOTH);
float
dx = 0.08f,
dy = 0.1f,
PacX = X + dx / 2,
PacY = Y - dy / 2;
Gl.glColor3f(1, 0.75f, 0.8f);
Gl.glPointSize(30);
Gl.glBegin(Gl.GL_POINTS);
Gl.glVertex2f(PacX, PacY);
Gl.glEnd();
Gl.glColor3f(1, 1, 1);
Gl.glPointSize(5);
Gl.glBegin(Gl.GL_POINTS);
Gl.glVertex2f(PacX - 0.02f, PacY + 0.02f);
Gl.glVertex2f(PacX + 0.02f, PacY + 0.02f);
Gl.glEnd();
Gl.glColor3f(0, 0, 0);
Gl.glPointSize(2);
Gl.glBegin(Gl.GL_POINTS);
Gl.glVertex2f(PacX - 0.02f, PacY + 0.02f);
Gl.glVertex2f(PacX + 0.02f, PacY + 0.02f);
Gl.glEnd();
Gl.glColor3f(0, 0, 0);
Gl.glPointSize(8);
Gl.glBegin(Gl.GL_POINTS);
Gl.glVertex2f(PacX , PacY - 0.02f);
Gl.glEnd();
Gl.glColor3f(1, 0, 0);
Gl.glPointSize(10);
Gl.glBegin(Gl.GL_POINTS);
Gl.glVertex2f(PacX - 0.025f, PacY - 0.035f);
Gl.glVertex2f(PacX + 0.025f, PacY - 0.035f);
Gl.glEnd();
}
void DrawBonusINV(float X, float Y)
{
Gl.glEnable(Gl.GL_POINT_SMOOTH);
float
dx = 0.08f,
dy = 0.1f;
Gl.glColor3f(1, 0, 0);
Gl.glPointSize(30);
Gl.glBegin(Gl.GL_POINTS);
Gl.glVertex2f(X + dx / 2, Y - dy / 2);
Gl.glEnd();
Gl.glColor3f(1, 0.75f, 0.8f);
Gl.glPointSize(22);
Gl.glBegin(Gl.GL_POINTS);
Gl.glVertex2f(X + dx / 2, Y - dy / 2);
Gl.glEnd();
Gl.glColor3f(1, 0, 0);
Gl.glLineWidth(5);
Gl.glBegin(Gl.GL_LINES);
Gl.glVertex2f(X, Y); Gl.glVertex2f(X + dx, Y - dy);
Gl.glVertex2f(X, Y - dy); Gl.glVertex2f(X + dx, Y);
Gl.glEnd();
}
void DrawPlayer(float x, float y,int Direct)
{
float StartX;
float StartY;
StartX = x;
StartY = y;
Gl.glEnable(Gl.GL_POINT_SMOOTH);
float
dx = 0.08f,
dy = 0.1f,
PacX = StartX + dx / 2,
PacY = StartY - dy / 2;
Gl.glColor3f(1, 1, 0);
Gl.glPointSize(30);
Gl.glBegin(Gl.GL_POINTS);
Gl.glVertex2f(PacX, PacY);
Gl.glEnd();
Gl.glColor3f(0, 0, 0);
switch (Direct)
{
case 0:
Gl.glPointSize(5);
Gl.glBegin(Gl.GL_POINTS);
Gl.glVertex2f(PacX, PacY + 0.02f);
Gl.glEnd();
Gl.glColor3f(0, 0, 0);
Gl.glBegin(Gl.GL_POLYGON);
Gl.glVertex2f(PacX, PacY);
Gl.glVertex2f(PacX + 0.04f, PacY + 0.04f);
Gl.glVertex2f(PacX + 0.04f, PacY - 0.04f);
Gl.glEnd();
break;
case 1:
Gl.glPointSize(5);
Gl.glBegin(Gl.GL_POINTS);
Gl.glVertex2f(PacX, PacY + 0.02f);
Gl.glEnd();
Gl.glColor3f(0, 0, 0);
Gl.glBegin(Gl.GL_POLYGON);
Gl.glVertex2f(PacX, PacY);
Gl.glVertex2f(PacX - 0.04f, PacY + 0.04f);
Gl.glVertex2f(PacX - 0.04f, PacY - 0.04f);
Gl.glEnd();
break;
case 2:
Gl.glPointSize(5);
Gl.glBegin(Gl.GL_POINTS);
Gl.glVertex2f(PacX - 0.02f, PacY);
Gl.glEnd();
Gl.glColor3f(0, 0, 0);
Gl.glBegin(Gl.GL_POLYGON);
Gl.glVertex2f(PacX, PacY);
Gl.glVertex2f(PacX - 0.04f, PacY + 0.05f);
Gl.glVertex2f(PacX + 0.04f, PacY + 0.05f);
Gl.glEnd();
break;
case 3:
Gl.glPointSize(5);
Gl.glBegin(Gl.GL_POINTS);
Gl.glVertex2f(PacX + 0.02f, PacY);
Gl.glEnd();
Gl.glColor3f(0, 0, 0);
Gl.glBegin(Gl.GL_POLYGON);
Gl.glVertex2f(PacX, PacY);
Gl.glVertex2f(PacX - 0.04f, PacY - 0.05f);
Gl.glVertex2f(PacX + 0.04f, PacY - 0.05f);
Gl.glEnd();
break;
}
}
void DrawEnd(float Start_X, float Start_Y)
{
float
dx = 0.08f,
dy = 0.1f;
Gl.glColor3f(1, 1, 0);
Gl.glRectf(Start_X, Start_Y, Start_X + dx, Start_Y - dy);
}
int Direc_player = 1;
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Up:
Direc_player = 2;
break;
case Keys.Down:
Direc_player = 3;
break;
case Keys.Left:
Direc_player = 1;
break;
case Keys.Right:
Direc_player = 0;
break;
}
}
int[,] Map1 = {
{ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 , 2 , 2 , 2, 2, 2,},
{ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 , 1 , 1 , 1, 1, 2,},
{ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 , 1 , 1 , 1, 1, 2,},
{ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 , 1 , 1 , 1, 1, 2,},
{ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 , 1 , 1 , 1, 1, 2,},
{ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2 , 1 , 1 , 1, 1, 2,},
{ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 , 1 , 1 , 1, 1, 2,},
{ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 , 1 , 1 , 1, 1, 2,},
{ 2, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1 , 1 , 1 , 1, 1, 2,},
{ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1 , 1 , 1 , 1, 1, 2,},
{ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 1, 1, 1, 1 , 1 , 1 , 1, 1, 2,},
{ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 , 1 , 1 , 1, 1, 2,},
{ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 , 1 , 1 , 1, 1, 2,},
{ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 , 1 , 1 , 1, 1, 2,},
{ 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 , 1 , 1 , 1, 1, 2,},
{ 2, 1, 2, 1, 2, 5, 2, 1, 1, 1, 1, 1, 1, 1, 1 , 1 , 1 , 1, 1, 2,},
{ 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 , 1 , 1 , 1, 1, 2,},
{ 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 , 2 , 3 , 2, 1, 2,},
{ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 , 1 , 2 , 1, 1, 2,},
{ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 , 2 , 2 , 2, 2, 2,},
};
' void DrawMap()'
{
float
StartX = -1,
StartY = 1;
for (int i = 0; i < 20; i++)
{
StartX = -1;
for (int j = 0; j < 20; j++)
{
switch ( Map1[i,j])
{
case 0: break;
case 1: DrawPointScore(StartX, StartY); break;
case 2: DrawWall(StartX, StartY); break;
case 3: case 4: DrawGhost(StartX, StartY); break;
case 5: DrawBonusINV(StartX, StartY); break;
case 6: DrawEnd(StartX, StartY); break;
case 7: DrawPlayer(StartX, StartY, Direc_player); break;
}
StartX += 0.08f;
}
StartY -= 0.1f;
}
}
int GhostSleep = 0;
' void MoveGhost()'
{
GhostSleep++;
if (GhostSleep > 5)
{
for (int D = 0; D < 20; D++)
{
for (int R = 0; R < 20; R++)
{
if ((Map1[D, R] != 1) && (Map1[D, R] != 2) && (Map1[D, R] != 5) && (Map1[D, R] != 6) && (Map1[D, R] != 7) && (Map1[D, R] != 0))
{
Random rnd = new Random();
int Direct = rnd.Next() % 4;
switch (Direct)
{
case 0:
if ((D + 1) < 20)
{
if (Map1[D + 1,R] == 7) Map1[D + 1,R] = 1;
if (
(Map1[D + 1,R] != 2) && //проверяем нет ли стены
(Map1[D + 1,R] != 3) && //проверяем нет ли 2 духа
(Map1[D + 1,R] != 4) && //проверяем нет ли 2 духа
(Map1[D + 1,R] != 5) && //проверяем нет ли бонуса
(Map1[D + 1,R] != 6) //проверяем нет ли выхода
)
{
Map1[D + 1,R] += 3;
Map1[D,R] -= 3;
}
}
break;
case 1:
if ((D - 1) > -1)
{
if (Map1[D - 1,R] == 7) Map[D - 1,R] = 1;
if (
(Map1[D - 1,R] != 3) &&
(Map1[D - 1,R] != 4) &&
(Map1[D - 1,R] != 2) &&
(Map1[D - 1,R] != 5) &&
(Map1[D - 1,R] != 6))
{
Map1[D - 1,R] += 3;
Map1[D,R] -= 3;
}
}
break;
case 2:
if ((R - 1) > 0)
{
if (Map1[D,R - 1] == 7) Map1[D,R - 1] = 1;
if (
(Map1[D,R - 1] != 3) &&
(Map1[D,R - 1] != 4) &&
(Map1[D,R - 1] != 2) &&
(Map1[D,R - 1] != 5) &&
(Map1[D,R - 1] != 6))
{
Map1[D,R - 1] += 3;
Map1[D,R] -= 3;
}
}
break;
case 3:
if ((R + 1) < 20)
{
if (Map1[D,R + 1] == 7) Map1[D,R + 1] = 1;
if (
(Map1[D,R + 1] != 3) &&
(Map1[D,R + 1] != 4) &&
(Map1[D,R + 1] != 2) &&
(Map1[D,R + 1] != 5) &&
(Map1[D,R + 1] != 6))
{
Map1[D,R + 1] += 3;
Map1[D,R] -= 3;
}
}
break;
}
}
}
}
GhostSleep = 0;
}
}
public Form1()
{
InitializeComponent();
Deck.InitializeContexts();
timer1.Enabled = false;
timer1.Interval = 300;
Start.Text = "Start";
}
private void Deck_Load(object sender, EventArgs e)
{
Tao.OpenGl.Gl.glClearColor(0, 0, 0, 0);
Tao.OpenGl.Gl.glClear( Tao.OpenGl.Gl.GL_COLOR_BUFFER_BIT |Tao.OpenGl.Gl.GL_DEPTH_BUFFER_BIT);
Gl.glLoadIdentity();
DrawMap();
}
private void timer1_Tick(object sender, EventArgs e)
{
//MessageBox.Show("F");
'Tao.OpenGl.Gl.glClearColor(0, 0, 0, 0);
Tao.OpenGl.Gl.glClear(Tao.OpenGl.Gl.GL_COLOR_BUFFER_BIT |Tao.OpenGl.Gl.GL_DEPTH_BUFFER_BIT);
Gl.glLoadIdentity();
DrawMap();
MoveGhost(); '
}
private void Start_Click(object sender, EventArgs e)
{
if (Start.Text=="Start")
{
timer1.Enabled = true;
timer1.Start();
Start.Text = "Pause";
}
else
{
timer1.Stop();
timer1.Enabled = false;
Start.Text = "Start";
}
}
}
}