IPB
ЛогинПароль:

 
 Ответить  Открыть новую тему 
> Монополия, некоторая проблема с программой
сообщение
Сообщение #1


Знаток
****

Группа: Пользователи
Сообщений: 346
Пол: Мужской
Реальное имя: Иван

Репутация: -  7  +


Начал писать "Монополию", если не выйдет с самообучающимся ИИ, сделаю просто на человек VS ИИ smile.gif
но вот проблема, программа верней - то что пока написано, вылетает, перед кодом коечто укажу для пояснения:
всё поле - это масив из 40 елементов - записей (element);
Заполнение поля - это считывание с текстового файла каждого елемента записи, причом для каждого считываеться обязательноего имя, и номер, если елемент поля - участок, то считывается еще и его стоимость, аренда и тд., если транспортная магистраль - то считываеться стоимость, если карточка то считываеться её тип, и тд...
И всё якобы хорошо, при первом проходе всё для первого елемента правильно считывает, но когда начинает считываться второй - прога вылетает, не считывает даже обязательные поля...
вот код:

program Monoply;
uses
Crt,Graph;
const

N=40;
doma : set of byte = [1,3,6,8,9,11,13,14,16,18,19,21,23,24,26,28,29,31,32,34,37,39];
card : set of byte = [2,4,12,17,27,38];
special : set of byte = [7,10,20,30,36,40];
transport : set of byte = [5,15,25,35];
metro_phone : set of byte = [22,33];
nomber_of_plase : set of byte = [1..N];
type
element = record

_name:string;
_nomber:byte;

case Activ_Nomber:byte of
1,3,6,8,9,11,13,14,16,18,19,21,23,24,26,28,29,31,32,34,37,39 : ( cost,arenda_0,arenda_1,arenda_2,arenda_3,arenda_4,arenda_5:integer;
house_cost:byte);
2,4,12,17,27,3 : (type_of_card:byte;);
7,10,20,30,36,4 : (type_of_spesial:byte;);
5,15,25,35 : (cost_of_transport:integer;);
22,33 : (cost_of_metro_phone:integer;);
end;
var
F1:text;
M:array [1..N] of element;

{////////////////////////////////////////////////////////}

procedure Initializations;
var
Gdriver,Gmod:integer;
begin
Gdriver:=detect;
initgraph(Gdriver,Gmod,'init\');
end;

{////////////////////////////////////////////////////////}

procedure Zapis_v_pamat;
var
I:integer;
nom:byte;
begin
Assign(F1,'pole.txt');
reset(F1);

For I:=1 to N do
begin
with M[I] do
begin

read(F1,_name);
read(F1,_nomber);
Activ_nomber:=_nomber;

if Activ_nomber in doma
then begin
read(F1,cost);
read(F1,arenda_0);
read(F1,arenda_1);
read(F1,arenda_2);
read(F1,arenda_3);
read(F1,arenda_4);
read(F1,arenda_5);
read(F1,house_cost);
end;
if Activ_nomber in card then read(F1,type_of_card);
if Activ_nomber in special then read(F1,type_of_spesial);
if Activ_nomber in transport then read(F1,cost_of_transport);
if Activ_nomber in metro_phone then read(F1,cost_of_metro_phone);

end;
end;

close(F1);
end;

{////////////////////////////////////////////////////////}

begin
Zapis_v_pamat;
readln;
end.



в файле только первые 12 елементов, но вылетает на втором

Сообщение отредактировано: RathaR -


Прикрепленные файлы
Прикрепленный файл  pole.txt ( 409 байт ) Кол-во скачиваний: 354


--------------------
Считающий себя единственым здравомыслящим человеком сумасшедший? Если да, возможно я псих...
Пусть умолкнет всякий критик!
Я - системный аналитик!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
И всё якобы хорошо, при первом проходе всё для первого елемента правильно считывает, но когда начинает считываться второй - прога вылетает
Файл данных мы должны сами придумать, или ты все-таки прицепишь тот, на котором у тебя вылетает?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Все Read-ы на ReadLn исправь, у тебя же каждое данное на новой строке... Символы #10, #13 (перевод строки/возврат каретки) портят тебе всю картину.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Знаток
****

Группа: Пользователи
Сообщений: 346
Пол: Мужской
Реальное имя: Иван

Репутация: -  7  +


Цитата(volvo @ 5.08.2009 22:00) *

Все Read-ы на ReadLn исправь, у тебя же каждое данное на новой строке... Символы #10, #13 (перевод строки/возврат каретки) портят тебе всю картину.

помогло, спасибо smile.gif над было повнимательней инфу про текст. файлы читать


--------------------
Считающий себя единственым здравомыслящим человеком сумасшедший? Если да, возможно я псих...
Пусть умолкнет всякий критик!
Я - системный аналитик!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Знаток
****

Группа: Пользователи
Сообщений: 346
Пол: Мужской
Реальное имя: Иван

Репутация: -  7  +


и вот снова я нуждаюсь в помощи...
я почти полностью закончил варганить графику в игре, и вот теперь нужно давать имена полям, прописывать правила, и записывать все тексты карточек, НО
я не знаю как поступить с записью вот этих карточек (я имею в виду карточки шанс, обществееная казна и тд. а их всего ничего - 16*3=48 - коротеньких текстов) и правил: записывать их в текстовый файл, а потом их при запуске считывать, или же записать ихсразу в программе?
В самом начале как только я приступил за "монополию" я думал сделать первым способом, тогда идея была в том чтобы любой желающий смог изменить в одном файлике названия улиц и предприятий на аналогичные в собственном городе smile.gif
Но сейчас я склоняюсь к тому что это была плохая идея... во первых - слишком много контроля получает человек над игрой (одна очепятка в цыфре, и всё...) а во вторых это прибавляет много проблем, я решил имена и стоимости присваивать сразу в игре, но как поступить с карточками и правилами?
Просто у каждой карточки есть её постоянный номер и если её содержимое изменить (вместо "получи 100"написать "заплати 100") то всёрамно игрок согласно номеру карточки получит 100 а не заплатит, и ктомуже хотелось бы сделать игру максимально независимой, ну какбы чтобы был один ексешник и всё smile.gif поэтому я склоняюсь к тому чтобы все эти тексты и правила просто записать в игре, но очень сильно опасаюсь за то, что люди, которые потом будут смотреть эту програму посчитают мои действия... ламерскими чтоли smile.gif
поетому я и хочу спросить не слишком ли это по "ламерски" записать тексты прямо в тексте програмы? rolleyes.gif


--------------------
Считающий себя единственым здравомыслящим человеком сумасшедший? Если да, возможно я псих...
Пусть умолкнет всякий критик!
Я - системный аналитик!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Цитата
не слишком ли это по "ламерски" записать тексты прямо в тексте програмы?
Так:
OutTextXY(x, y, 'Получи 100');
- по ламерски. А вот так:

Const sGetMoney = 'Получи 100';
...
OutTextXY(x, y, sGetMoney);
- уже нет... Все строки храни в виде констант (массива констант, если быть точнее), а не прямо в коде. С одной стороны - это дает тебе возможность очень быстро заменить строку на другую, не ползать по всему коду. С другой - не дает пользователю возможности поменять что-то (вариант взлома не рассматриваем).
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Знаток
****

Группа: Пользователи
Сообщений: 346
Пол: Мужской
Реальное имя: Иван

Репутация: -  7  +


Цитата(volvo @ 18.08.2009 14:16) *

Все строки храни в виде констант (массива констант, если быть точнее), а не прямо в коде. С одной стороны - это дает тебе возможность очень быстро заменить строку на другую, не ползать по всему коду. С другой - не дает пользователю возможности поменять что-то (вариант взлома не рассматриваем).

хэх... опять таки не додумался бы unsure.gif спасибо за подсказку good.gif


--------------------
Считающий себя единственым здравомыслящим человеком сумасшедший? Если да, возможно я псих...
Пусть умолкнет всякий критик!
Я - системный аналитик!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 19:35
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name