Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2006, 09:25   #1
parasite_eve
 
Регистрация: 11.12.2006
Сообщений: 5
По умолчанию карточная игра 21

решил начать с простой карточной игрульки,есть много косяков
1)карты повторяюца
2)при нажатии кнопку себе-одна и тажа карта
3)грамоздкий код
помогите или посоветуйте как исправить
unit game;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls;
type
TForm1 = class(TForm)
Image1: TImage; Image2: TImage;
Image3: TImage; Image4: TImage;
Image5: TImage; Image6: TImage;
Image7: TImage; Image8: TImage;
Image9: TImage; Image10: TImage;
Image11: TImage; Image12: TImage;
Image13: TImage; Image14: TImage;
BitBtn1: TBitBtn; BitBtn2: TBitBtn;
Label1: TLabel; Button1: TButton;
Button2: TButton; Label2: TLabel;
procedure BitBtn1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
var s1,s,x:integer;
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
bitbtn1.Caption:='Дать ещё карту';
if s=21 then
begin
label1.Caption:='Ты победил';
Button1.Enabled:=false;
Bitbtn1.Enabled:=false;
end;
if s>21 then
begin
label1.Caption:='Извени, ты проиграл!!!';
Button1.Enabled:=false;
Bitbtn1.Enabled:=false;
end;
if image1.Tag=0 then
begin
image1.Picture:=image8.Picture;
image1.Tag:=1;
end
else if image2.Tag=0 then
begin
image2.Picture:=image8.Picture;
image2.Tag:=1;
end
else if image3.Tag=0 then
begin
image3.Picture:=image8.Picture;
image3.Tag:=1;
end
else if image4.Tag=0 then
begin
image4.Picture:=image8.Picture;
image4.Tag:=1;
end
else if image5.Tag=0 then
begin
image5.Picture:=image8.Picture;
image5.Tag:=1;
end
else if image6.Tag=0 then
begin
image6.Picture:=image8.Picture;
image6.Tag:=1;
end
else if image7.Tag=0 then
begin
image7.Picture:=image8.Picture;
image7.Tag:=1;
end;
randomize;
x:=random(52)+1;
label1.Caption:=inttostr(s);
case x of
1:begin s:=s+2;image8.Picture.LoadFromFile( '02s.bmp');end;
2:begin s:=s+3;image8.Picture.LoadFromFile( '03s.bmp');end;
3:begin s:=s+4;image8.Picture.LoadFromFile( '04s.bmp');end;
4:begin s:=s+5;image8.Picture.LoadFromFile( '05s.bmp');end;
5:begin s:=s+6;image8.Picture.LoadFromFile( '06s.bmp');end;
6:begin s:=s+7;image8.Picture.LoadFromFile( '07s.bmp');end;
7:begin s:=s+8;image8.Picture.LoadFromFile( '08s.bmp');end;
8:begin s:=s+9;image8.Picture.LoadFromFile( '09s.bmp');end;
9:begin s:=s+10;image8.Picture.LoadFromFile ('10s.bmp');end;
10:begin s:=s+2;image8.Picture.LoadFromFile( '11s.bmp');end;
11:begin s:=s+3;image8.Picture.LoadFromFile( '12s.bmp');end;
12:begin s:=s+4;image8.Picture.LoadFromFile( '13s.bmp');end;
13:begin s:=s+11;image8.Picture.LoadFromFile ('01s.bmp');end;
,,,,,,,
50:begin s:=s+2;image8.Picture.LoadFromFile( '12d.bmp');end;
51:begin s:=s+2;image8.Picture.LoadFromFile( '13d.bmp');end;
52:begin s:=s+2;image8.Picture.LoadFromFile( '01d.bmp');end;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
if image9.Tag=0 then
begin
image9.Picture:=image8.Picture;
image9.Tag:=1;
end
else if image10.Tag=0 then
begin
image10.Picture:=image8.Picture;
image10.Tag:=1;
end
else if image11.Tag=0 then
begin
image11.Picture:=image8.Picture;
image11.Tag:=1;
end
else if image12.Tag=0 then
begin
image12.Picture:=image8.Picture;
image12.Tag:=1;
end
else if image13.Tag=0 then
begin
image13.Picture:=image8.Picture;
image13.Tag:=1;
end
else if image14.Tag=0 then
begin
image14.Picture:=image8.Picture;
image14.Tag:=1;
end;
end;
end.
parasite_eve вне форума Ответить с цитированием
Старый 19.12.2006, 12:52   #2
Simply-Art
Программист и
Участник клуба
 
Аватар для Simply-Art
 
Регистрация: 29.10.2006
Сообщений: 1,265
По умолчанию

Мне кажется, что надо сделать массив с номерами карт. Потом методом случайных чисел выбирать одну карту из массива (удалять элемент массива, смещая всё после “влево”), потом уменьшаем счётчик карт в колоде для Random, чтоб он не брал не существующие карты. С помощью этого можно избежать повтора карт.

Работа c массивом в крации
var
<указываем имя массива>:array[<нижняя граница>..<верхняя граница>] of <тип данных>
мия массива любое
нижняя граница - номер первого элемента массива
верхняя граница - номер последнего элемента
тип данных - integer, string вобщем чё будет записываться в массив

Пример:

implementation
var
mass:array[1..52] of string;
n:integer;
//...
при создании формы
//...
begin
n:=0;
end;
//...
при нажатии на кнопку
//...
begin
//задание массива
n:=n+1;
//обращение к элементу массива происходит по его номеру
mass[n]:=edit1.text;// элементу под номером n будет присвоено содержание компонента edit1
end;

Всё

Последний раз редактировалось Simply-Art; 19.12.2006 в 13:11. Причина: Не дописал работу с массивом
Simply-Art вне форума Ответить с цитированием
Старый 19.12.2006, 13:02   #3
parasite_eve
 
Регистрация: 11.12.2006
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Simply-Art Посмотреть сообщение
Мне кажется, что надо сделать массив с номерами карт. Потом методом случайных чисел выбирать одну карту из массива (удалять элемент массива, смещая всё после “влево”), потом уменьшаем счётчик карт в колоде для Random, чтоб он не брал не существующие карты. С помощью этого можно избежать повтора карт.
чуток подробней мона,я масивом неумею пользоваться
parasite_eve вне форума Ответить с цитированием
Старый 19.12.2006, 16:38   #4
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Я когда-то начинал игру делать, взял карты (36 штук), запихал их в 1 bmp, а потом прога сама их считывала от туда в массив. (т.е. получается массив картинок).
Тут (не обращай внимание на название проекта, это я хотел эту игру писать) значит это всё есть, по нажатию кнопки там из массива 1 карта берётся и отображается в Image. Ну я думаю там всё понятно будет:
-=DeS=-
---------------
В игре 21 не 36 а 52 карты кстати!!!
Вложения
Тип файла: rar igra.rar (245.0 Кб, 80 просмотров)

Последний раз редактировалось -=DeS=-; 20.12.2006 в 12:31.
zetrix вне форума Ответить с цитированием
Старый 20.12.2006, 09:36   #5
parasite_eve
 
Регистрация: 11.12.2006
Сообщений: 5
По умолчанию

Непомню откуда надёргал,может кому нить пригодица
Вложения
Тип файла: zip cards2.zip (186.7 Кб, 72 просмотров)
parasite_eve вне форума Ответить с цитированием
Старый 20.12.2006, 09:39   #6
parasite_eve
 
Регистрация: 11.12.2006
Сообщений: 5
По умолчанию

воть есцо компоненты для карточных игр
Вложения
Тип файла: rar cards.rar (389.1 Кб, 62 просмотров)
parasite_eve вне форума Ответить с цитированием
Старый 20.12.2006, 12:23   #7
-=DeS=-
Форумчанин
 
Аватар для -=DeS=-
 
Регистрация: 20.12.2006
Сообщений: 135
По умолчанию

Всё можно сделать стандартными компонентами, например карты TBitBtn!!!
свойство Glyph
writeln('Hello Dude!!!');

Последний раз редактировалось -=DeS=-; 20.12.2006 в 12:35.
-=DeS=- вне форума Ответить с цитированием
Старый 20.12.2006, 13:54   #8
Speeker
Форумчанин
 
Аватар для Speeker
 
Регистрация: 01.12.2006
Сообщений: 241
По умолчанию

Вместо масива можно использовать переменную типа TStrings, тогда смещение делать не надо, элемент будет просто удаляться из списка, а карту выдавать Random(a.count), где а - переменная типа стринг
Програмисты - единственные люди, которым платят за исправления их же ошибок
Speeker вне форума Ответить с цитированием
Старый 21.12.2006, 16:34   #9
parasite_eve
 
Регистрация: 11.12.2006
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Speeker Посмотреть сообщение
Вместо масива можно использовать переменную типа TStrings, тогда смещение делать не надо, элемент будет просто удаляться из списка, а карту выдавать Random(a.count), где а - переменная типа стринг
примерчик можешь сделать наглядный
parasite_eve вне форума Ответить с цитированием
Старый 11.01.2007, 12:03   #10
Alex_soldier
Пользователь
 
Аватар для Alex_soldier
 
Регистрация: 11.01.2007
Сообщений: 12
По умолчанию Множества!!!

А ведь для этих целей как нельзя лучше подходят множества!

Создадим переменную:

var koloda: set of byte;

Заполним картами:

for i:=1 to 52 do koloda:=koloda+[i];

Проверка наличия случайной карты в колоде:

repeat
card:=random(52)+1;
until (card in koloda);

Убрать карту из колоды:

koloda:=koloda-[card];


Вроде все так, хотя могут быть микронеточности, давно это все было!
Alex_soldier вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
РПГ игра Принц Gamedev - cоздание игр: Unity, OpenGL, DirectX 4 10.06.2008 15:57
Карточная колода при помощи Switch на С++ Amen Общие вопросы C/C++ 1 28.02.2008 08:24
Помогите с игрой в Visual Basic (совершенно любая, карточная, домино, дарц и т.д.) leogirl Gamedev - cоздание игр: Unity, OpenGL, DirectX 6 13.11.2007 19:18
Карточная игра steck Общие вопросы Delphi 3 07.10.2007 17:59
игра S.T.A.L.K.E.R. rpy3uH Свободное общение 7 10.04.2007 00:17