Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите с WINGRAPH ом
Форум «Всё о Паскале» > Pascal, Object Pascal > Написание игр
justix
Пытаюсь запустить простенькую программу(я пока тока уровень отрисовываю)
Вылетает с ошибкой екзиткод5(но это в винграфе,а мне нужно именно в нём всё писать).Но в обычном графе он запускается,но курсор не рисуется,и вроде бы зависает на меню,потому что отрисовывает тока меню(тобишь всё что написано)а никаких действий с ним не происходит,не интер не искейп ничего и выйти не нажава на крестик окошка нельзя.Подскажите что не так.Вот код.
Писал в FPC 2.4.4

uses wincrt,wingraph;
const
ny=32;
nx=20;
dx=50;
dy=22;
up=#72;
left=#75;
right=#77;
down=#80;
esc=#27;
probel=#32;
enter=#13;
type massiv = array[1..ny,1..nx] of integer;
const a:massiv=(
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1));
var gd,gm:integer;
p_zem,p_kursor:pointer;
ch:char;
s:string;
tab:massiv;
x0,y0:integer;

procedure load_image(name_file:string; var p:pointer);
var f:file;
size:word;
begin
assign(f,name_file);
reset(f,1);
size:=filesize(f);
getmem(p,size);
blockread(f,p^,size);
close(f);
end;

procedure initpict;
begin
load_image('zemlya',p_zem);
load_image('kursor',p_kursor);
end;


procedure drawlab;
var x,y,i,k:integer;
begin
for i:=1 to ny do
for k:=1 to nx do
tab[i, k]:=a[i, k];
for i:=1 to ny do
for k:=1 to nx do
begin
x:=x0+(k-1)*dx;
y:=y0+(i-1)*dy;
case tab[i,k] of
1: putimage(x,y,p_zem^,copyput);
end;
end;
end;

procedure menu;
var np:integer;
begin
setcolor(12);
settextstyle(0,0,3);
outtextxy(250,40,'MENU');
outtextxy(250,200,'1.GAME');
outtextxy(250,240,'2.HELP');
outtextxy(250,280,'3.EXIT');
np:=1;
putimage(400,200+(np-1)*40,p_kursor^,1);
repeat
ch:=readkey;
if ch=#0 then
begin
ch:=readkey;
putimage(400,200+(np-1)*40,p_kursor^,1);
case ch of
up: if np>1 then np:=np-1;
down: if np<3 then np:=np+1;
end;
putimage(400,200+(np-1)*40,p_kursor^,1);
end;
until ch=enter;
case np of
1:drawlab;
2:exit;
3:exit;
end;
end;

begin
gd:=detect;
initgraph(gd,gm,'');
initpict;
x0:=0;
y0:=0;
menu;
//drawlab;
closegraph;
end.

Добавлено через 10 мин.
Так,в uses добавил модуль math,а в главной программе сразу после бегина написал
SetExceptionMask([exInvalidOp, exDenormalized, exZeroDivide, exOverflow,
exUnderflow, exPrecision]);
Запустило,но просто черный экран,по нажатию закрывается и выходит обратно в компилятор.
justix
Цитата(justix @ 8.12.2011 15:47) *

Пытаюсь запустить простенькую программу(я пока тока уровень отрисовываю)
Вылетает с ошибкой екзиткод5(но это в винграфе,а мне нужно именно в нём всё писать).Но в обычном графе он запускается,но курсор не рисуется,и вроде бы зависает на меню,потому что отрисовывает тока меню(тобишь всё что написано)а никаких действий с ним не происходит,не интер не искейп ничего и выйти не нажава на крестик окошка нельзя.Подскажите что не так.Вот код.
Писал в FPC 2.4.4

uses wincrt,wingraph;
const
ny=32;
nx=20;
dx=50;
dy=22;
up=#72;
left=#75;
right=#77;
down=#80;
esc=#27;
probel=#32;
enter=#13;
type massiv = array[1..ny,1..nx] of integer;
const a:massiv=(
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1));
var gd,gm:integer;
p_zem,p_kursor:pointer;
ch:char;
s:string;
tab:massiv;
x0,y0:integer;

procedure load_image(name_file:string; var p:pointer);
var f:file;
size:word;
begin
assign(f,name_file);
reset(f,1);
size:=filesize(f);
getmem(p,size);
blockread(f,p^,size);
close(f);
end;

procedure initpict;
begin
load_image('zemlya',p_zem);
load_image('kursor',p_kursor);
end;
procedure drawlab;
var x,y,i,k:integer;
begin
for i:=1 to ny do
for k:=1 to nx do
tab[i, k]:=a[i, k];
for i:=1 to ny do
for k:=1 to nx do
begin
x:=x0+(k-1)*dx;
y:=y0+(i-1)*dy;
case tab[i,k] of
1: putimage(x,y,p_zem^,copyput);
end;
end;
end;

procedure menu;
var np:integer;
begin
setcolor(12);
settextstyle(0,0,3);
outtextxy(250,40,'MENU');
outtextxy(250,200,'1.GAME');
outtextxy(250,240,'2.HELP');
outtextxy(250,280,'3.EXIT');
np:=1;
putimage(400,200+(np-1)*40,p_kursor^,1);
repeat
ch:=readkey;
if ch=#0 then
begin
ch:=readkey;
putimage(400,200+(np-1)*40,p_kursor^,1);
case ch of
up: if np>1 then np:=np-1;
down: if np<3 then np:=np+1;
end;
putimage(400,200+(np-1)*40,p_kursor^,1);
end;
until ch=enter;
case np of
1:drawlab;
2:exit;
3:exit;
end;
end;

begin
gd:=detect;
initgraph(gd,gm,'');
initpict;
x0:=0;
y0:=0;
menu;
//drawlab;
closegraph;
end.

Добавлено через 10 мин.
Так,в uses добавил модуль math,а в главной программе сразу после бегина написал
SetExceptionMask([exInvalidOp, exDenormalized, exZeroDivide, exOverflow,
exUnderflow, exPrecision]);
Запустило,но просто черный экран,по нажатию закрывается и выходит обратно в компилятор.

проблемы решил сам.Оказалось надо было работать с БМП картинками,а я подгружал ПАС картинки.

Добавлено через 1 мин.
Цитата(justix @ 8.12.2011 15:47) *

Пытаюсь запустить простенькую программу(я пока тока уровень отрисовываю)
Вылетает с ошибкой екзиткод5(но это в винграфе,а мне нужно именно в нём всё писать).Но в обычном графе он запускается,но курсор не рисуется,и вроде бы зависает на меню,потому что отрисовывает тока меню(тобишь всё что написано)а никаких действий с ним не происходит,не интер не искейп ничего и выйти не нажава на крестик окошка нельзя.Подскажите что не так.Вот код.
Писал в FPC 2.4.4

uses wincrt,wingraph;
const
ny=32;
nx=20;
dx=50;
dy=22;
up=#72;
left=#75;
right=#77;
down=#80;
esc=#27;
probel=#32;
enter=#13;
type massiv = array[1..ny,1..nx] of integer;
const a:massiv=(
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1));
var gd,gm:integer;
p_zem,p_kursor:pointer;
ch:char;
s:string;
tab:massiv;
x0,y0:integer;

procedure load_image(name_file:string; var p:pointer);
var f:file;
size:word;
begin
assign(f,name_file);
reset(f,1);
size:=filesize(f);
getmem(p,size);
blockread(f,p^,size);
close(f);
end;

procedure initpict;
begin
load_image('zemlya',p_zem);
load_image('kursor',p_kursor);
end;
procedure drawlab;
var x,y,i,k:integer;
begin
for i:=1 to ny do
for k:=1 to nx do
tab[i, k]:=a[i, k];
for i:=1 to ny do
for k:=1 to nx do
begin
x:=x0+(k-1)*dx;
y:=y0+(i-1)*dy;
case tab[i,k] of
1: putimage(x,y,p_zem^,copyput);
end;
end;
end;

procedure menu;
var np:integer;
begin
setcolor(12);
settextstyle(0,0,3);
outtextxy(250,40,'MENU');
outtextxy(250,200,'1.GAME');
outtextxy(250,240,'2.HELP');
outtextxy(250,280,'3.EXIT');
np:=1;
putimage(400,200+(np-1)*40,p_kursor^,1);
repeat
ch:=readkey;
if ch=#0 then
begin
ch:=readkey;
putimage(400,200+(np-1)*40,p_kursor^,1);
case ch of
up: if np>1 then np:=np-1;
down: if np<3 then np:=np+1;
end;
putimage(400,200+(np-1)*40,p_kursor^,1);
end;
until ch=enter;
case np of
1:drawlab;
2:exit;
3:exit;
end;
end;

begin
gd:=detect;
initgraph(gd,gm,'');
initpict;
x0:=0;
y0:=0;
menu;
//drawlab;
closegraph;
end.

Добавлено через 10 мин.
Так,в uses добавил модуль math,а в главной программе сразу после бегина написал
SetExceptionMask([exInvalidOp, exDenormalized, exZeroDivide, exOverflow,
exUnderflow, exPrecision]);
Запустило,но просто черный экран,по нажатию закрывается и выходит обратно в компилятор.

Проблемы решил.Надо было подгружать бмп картинки а не пас картинки
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.