Давайте всем форумом напишем вот эту игру. Причем так, что бы в ней были режимы как одно пользовательской ( с ИИ ) так и много пользовательской игры, желательно еще и игру по локалке.
сделать все вместе согласны такой общий проект?
program scrablet;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
tfield = array [0..14,0..14] of char;
const
letter_A = 1;
letter_B = 3;
letter_V = 2;
letter_G = 3;
letter_D = 2;
letter_E = 1;
letter_ZH = 5;
letter_Z = 5;
letter_I = 1;
letter_Y = 2;
letter_K = 2;
letter_L = 2;
letter_M = 2;
letter_N = 1;
letter_O = 1;
letter_P = 2;
letter_R = 2;
letter_S = 2;
letter_T = 2;
letter_U = 3;
letter_F = 10;
letter_H = 5;
letter_TS = 10;
letter_CH = 5;
letter_SH = 10;
letter_SHSC = 10;
letter_HZ = 10;
letter_II = 5;
letter_LZ = 5;
letter_EZ = 10;
letter_YU = 10;
letter_YA = 3;
type
tplayer = record
hand : array [ 0..6 ] of char;
score : integer;
put : array [ 0..6 ] of char;
puts : integer;
end;
tbag = record
plates : array [ 0..33, 0..1 ] of integer;
inside : integer;
end;
type
tgame = record
field : tfield;
player1 : tplayer;
player2 : tplayer;
bag : tbag;
end;
procedure nill_field(var field : tfield);
var i, j : integer;
begin
for i:= 0 to 14 do
for j:= 0 to 14 do
field[i,j]:='_';
end;
procedure nill_player(var player : tplayer);
var i: integer;
begin
for i:= 0 to 7 do begin
player.hand[i]:='_';
player.put[i]:='_';
end;
player.score:=0;
player.puts:=0;
end;
procedure fill_bag(var bag : tbag);
var bag_file : text;
var i : integer;
begin
assign(bag_file,'bag.res');
reset(bag_file);
for i := 0 to 33 do begin
read(bag_file, bag.plates[i,0]);
bag.plates[i,1]:=i;
end;
close(bag_file);
end;
procedure bag_move(var bag : tbag );
var i, j : integer;
begin
for i:= 0 to 32 do
if bag.plates[i,0] = 0 then
for j:= i+1 to 33 do begin
bag.plates[j-1,0]:=bag.plates[j,0];
bag.plates[j-1,1]:=bag.plates[j,1];
end;
end;
procedure hand_move(var player : tplayer);
var i,j : integer;
begin
for i:= 0 to 5 do
if player.hand[i]= '_' then
for j:= i+1 to 6 do
player.hand[j-1]:=player.hand[j];
end;
function hand_length(var player : tplayer) : integer;
var i : integer;
begin
hand_move(player);
i:=0;
while (player.hand[i]<>'_') and not(i>=6) do
inc(i);
if player.hand[6]<>'_' then
inc(i);
result:=i;
end;
procedure init_game(var game : tgame);
begin
{ fill_bag(game.bag);}
nill_field(game.field);
nill_player(game.player1);
nill_player(game.player2);
end;
procedure show_field_in_text_mode( field : tfield );
var i, j : integer;
begin
write(' ');
for i := 0 to 14 do
if (i div 10) = 1 then
write(1,' ') else write(0,' ');
writeln;
write(' ');
for i := 0 to 14 do
write(i mod 10,' ');
writeln;
writeln;
for i := 0 to 14 do begin
if (i div 10) = 0 then
write('0',i,' ') else write(i,' ');
for j := 0 to 14 do
write(field[j,i],' ');
writeln;
end;
end;
var game : tgame;
begin
init_game(game);
show_field_in_text_mode(game.field);
readln;
end.
{Scrabble}
{Version Text Object Pascal 0.01}
{File Scrabble_TOP-0_01}
const
BoardSize=15; BrdSz=BoardSize; N=BoardSize; {Razmer doski}
MaxAlphaLength=100; MxAL=MaxAlphaLength; {Max dlina alfavita}
type
tLetter=word; {Nomer bukvy po poryadku, nachinaya s 1}
tCell=record {Yacheika doski}
Letter:tLetter; {bukva}
Bonus:integer; {umnozhenie ceny}
end;
tBoard=array[1..BoardSize]of tCell; {Doska}
tRate=array[1..MaxAlphaLength]of integer; {Cena kazhdoi bukvy}
tAlpha=array[1..MaxAlphaLength]of char; {Alfavit, simboly dlya vyvoda}
var
Board:tBoard;
M:word; {Dlina alfavita, schityvaem is faila}
Rate:tRate; {Schityvaem is faila}
Alpha:tAlpha; {Schityvaem is faila}
begin
end.
{Scrabble}
{Version T.P.00.02}
{File Scrabble_TOP-0_02}
{Date 061103}
uses
CRT;
const
Version=11002;
FileSign='Scrabble Forum-Pascal Project';
DataFile='Scrabble.dat';
MaxBoardSize=100; MxBS=MaxBoardSize; {Max Razmer doski}
MaxAlphaLength=100; MxAL=MaxAlphaLength; {Max dlina alfavita}
BonusColors:array[0..15]of byte=(0,7,1,2,0,0,0,5,4,0,0,0,0,0,0,0);
type
tLetter=word; {Nomer bukvy po poryadku, nachinaya s 1}
tCell=object {Yacheika doski}
Letter:tLetter; {Nomer bukvy, 0-pusto}
Bonus:integer; {umnozhenie ceny (cvetnye kletki)}
procedure Show;
procedure Hide;
end;
tBoard=object {Doska}
Field:array[1..MxBS,1..MxBS]of tCell; {Kletki - Horizontal,Vertical}
Nx,Ny:integer; {Razmery doski}
x,y:integer; {Koordinaty levogo-vrhnego ugla}
sx,sy:integer; {Shagi po x i y}
constructor Init;
procedure Show;
procedure Hide;
end;
tToken=record
Rate:integer; {Cena bukvy}
Symbol:char; {Symvol dlya pokaza na doske}
Quantity:integer; {Kolichestvo bukv}
end;
tAlpha=array[1..MaxAlphaLength]of tToken; {Alfavit}
var
Board:tBoard;
M:word; {Dlina alfavita, schityvaem is faila}
Alpha:tAlpha; {Schityvaem is faila}
Data:text;
procedure tCell.Show;
begin
TextBackground(BonusColors[Bonus]);
if Letter<>0 then Write(Letter) else Write(' ');
end;
procedure tCell.Hide;
begin
Write(' ')
end;
constructor tBoard.Init;
var
i,j:integer;
begin
x:=3; y:=3;
sx:=1; sy:=1;
for j:=1 to Ny do for i:=1 to Nx do;
end;
procedure tBoard.Show;
var
i,j:integer;
begin
for j:=1 to Ny do for i:=1 to Nx do begin
GoToXY(x+sx*Pred(i),y+sy*Pred(j));
Field[i,j].Show
end
end;
procedure tBoard.Hide;
begin
Write(' ')
end;
var
i,j:integer;
c:char;
begin
Board.Init;
Assign(Data,DataFile);
ReSet(Data);
ReadLn(Data);
ReadLn(Data);
with Board do begin
ReadLn(Data,Nx,Ny);
for j:=1 to Ny do begin
for i:=1 to Nx do with Field[i,j] do begin
Read(Data,c);
if c='.' then Bonus:=1 else Bonus:=Ord©-48
end;
ReadLn(Data)
end
end;
ReadLn(Data);
ReadLn(Data);
ReadLn(Data,M);
for i:=1 to M do with Alpha[i] do repeat Read(Data,Symbol) until Symbol<>' ';
for i:=1 to M do begin
Read(Data,Alpha[i].Rate);
end;
for i:=1 to M do Read(Data,Alpha[i].Quantity);
Close(Data);
ClrScr;
Board.Show;
ReadLn
end.
Scrabble Forum-Pascal Project
11001
15 15
8..2...8...2..8
.7...3...3...7.
..7...2.2...7..
2..7...2...7..2
....3.....3....
.3...2...2...3.
..2.........2..
8..2.......2..8
..2.........2..
.3...2...2...3.
....3.....3....
2..7...2...7..2
..7...2.2...7..
.7...3...3...7.
8..2...8...2..8
russian
win1251
32
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я
1 3 2 3 2 1 5 5 1 3 2 2 2 1 1 2 2 2 2 3 10 5 10 5 10 10 10 5 5 10 10 3
12 7 9 7 9 12 5 5 12 7 9 9 9 12 12 9 9 9 9 7 3 5 3 5 3 3 3 5 5 3 3 7