git.shiar.nl
/
netris.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
initial interface requests
[netris.git]
/
game.c
diff --git
a/game.c
b/game.c
index b40c12948035f365d4fc7a5a5463bd57c33577dc..423befb475c35d7686916d6f59cdd4118998fbd6 100644
(file)
--- a/
game.c
+++ b/
game.c
@@
-27,12
+27,12
@@
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <netinet/in.h>
-enum { KT_left, KT_r
otate, KT_righ
t, KT_drop, KT_down,
+enum { KT_left, KT_r
ight, KT_rotright, KT_rotlef
t, KT_drop, KT_down,
KT_toggleSpy, KT_pause, KT_faster, KT_redraw, KT_numKeys };
static char *keyNames[KT_numKeys+1] = {
KT_toggleSpy, KT_pause, KT_faster, KT_redraw, KT_numKeys };
static char *keyNames[KT_numKeys+1] = {
- "Left", "R
otate", "Right", "Drop", "Down", "ToggleSpy", "Pause
",
- "Faster", "Redraw", NULL };
+ "Left", "R
ight", "RotRight", "RotLeft", "Drop", "Down
",
+ "
ToggleSpy", "Pause", "
Faster", "Redraw", NULL };
static char *gameNames[GT_len] = { "OnePlayer", "ClassicTwo" };
static char *gameNames[GT_len] = { "OnePlayer", "ClassicTwo" };
@@
-77,14
+77,19
@@
ExtFunc void MapKeys(char *newKeys)
ExtFunc int StartNewPiece(int scr, Shape *shape)
{
ExtFunc int StartNewPiece(int scr, Shape *shape)
{
- curShape[scr] = shape;
+ if (nextShape[scr]) {
+ curShape[scr] = nextShape[scr];
+ nextShape[scr] = shape;
+ }
+ else
+ curShape[scr] = shape;
curY[scr] = boardVisible[scr] + 4;
curX[scr] = boardWidth[scr] / 2;
curY[scr] = boardVisible[scr] + 4;
curX[scr] = boardWidth[scr] / 2;
- while (!ShapeVisible(
shape
, scr, curY[scr], curX[scr]))
+ while (!ShapeVisible(
curShape[scr]
, scr, curY[scr], curX[scr]))
--curY[scr];
--curY[scr];
- if (!ShapeFits(
shape
, scr, curY[scr], curX[scr]))
+ if (!ShapeFits(
curShape[scr]
, scr, curY[scr], curX[scr]))
return 0;
return 0;
- PlotShape(
shape
, scr, curY[scr], curX[scr], 1);
+ PlotShape(
curShape[scr]
, scr, curY[scr], curX[scr], 1);
return 1;
}
return 1;
}
@@
-92,6
+97,7
@@
ExtFunc void OneGame(int scr, int scr2)
{
MyEvent event;
int linesCleared, changed = 0;
{
MyEvent event;
int linesCleared, changed = 0;
+ int totalDrops = 0, totalLines = 0, totalAdds = 0;
int spied = 0, spying = 0, dropMode = 0;
int oldPaused = 0, paused = 0, pausedByMe = 0, pausedByThem = 0;
long pauseTimeLeft;
int spied = 0, spying = 0, dropMode = 0;
int oldPaused = 0, paused = 0, pausedByMe = 0, pausedByThem = 0;
long pauseTimeLeft;
@@
-127,7
+133,9
@@
ExtFunc void OneGame(int scr, int scr2)
RobotCmd(0, "BeginGame\n");
RobotTimeStamp();
}
RobotCmd(0, "BeginGame\n");
RobotTimeStamp();
}
+ nextShape[scr] = ChooseOption(stdOptions);
while (StartNewPiece(scr, ChooseOption(stdOptions))) {
while (StartNewPiece(scr, ChooseOption(stdOptions))) {
+ ShowScore(scr, totalDrops, totalLines, totalAdds);
if (robotEnable && !fairRobot)
RobotCmd(1, "NewPiece %d\n", ++pieceCount);
if (spied) {
if (robotEnable && !fairRobot)
RobotCmd(1, "NewPiece %d\n", ++pieceCount);
if (spied) {
@@
-136,7
+144,7
@@
ExtFunc void OneGame(int scr, int scr2)
shapeNum = ShapeToNetNum(curShape[scr]);
data[0] = hton2(shapeNum);
shapeNum = ShapeToNetNum(curShape[scr]);
data[0] = hton2(shapeNum);
- SendPacket(NP_newPiece, sizeof(data), data);
+ SendPacket(
scr,
NP_newPiece, sizeof(data), data);
}
for (;;) {
changed = RefreshBoard(scr) || changed;
}
for (;;) {
changed = RefreshBoard(scr) || changed;
@@
-152,7
+160,7
@@
ExtFunc void OneGame(int scr, int scr2)
if (!MovePiece(scr, -1, 0))
goto nextPiece;
else if (spied)
if (!MovePiece(scr, -1, 0))
goto nextPiece;
else if (spied)
- SendPacket(NP_down, 0, NULL);
+ SendPacket(
scr,
NP_down, 0, NULL);
break;
case E_key:
p = strchr(keyTable, tolower(event.u.key));
break;
case E_key:
p = strchr(keyTable, tolower(event.u.key));
@@
-171,19
+179,24
@@
ExtFunc void OneGame(int scr, int scr2)
switch(key) {
case KT_left:
if (MovePiece(scr, 0, -1) && spied)
switch(key) {
case KT_left:
if (MovePiece(scr, 0, -1) && spied)
- SendPacket(NP_left, 0, NULL);
+ SendPacket(
scr,
NP_left, 0, NULL);
break;
case KT_right:
if (MovePiece(scr, 0, 1) && spied)
break;
case KT_right:
if (MovePiece(scr, 0, 1) && spied)
- SendPacket(NP_right, 0, NULL);
+ SendPacket(scr, NP_right, 0, NULL);
+ break;
+ case KT_rotleft:
+ if (RotatePiece(scr, 0) && spied)
+ SendPacket(scr, NP_rotleft, 0, NULL);
break;
break;
- case KT_rot
ate
:
- if (RotatePiece(scr) && spied)
- SendPacket(
NP_rotate
, 0, NULL);
+ case KT_rot
right
:
+ if (RotatePiece(scr
, 1
) && spied)
+ SendPacket(
scr, NP_rotright
, 0, NULL);
break;
case KT_down:
if (MovePiece(scr, -1, 0) && spied)
break;
case KT_down:
if (MovePiece(scr, -1, 0) && spied)
- SendPacket(NP_down, 0, NULL);
+ SendPacket(scr, NP_down, 0, NULL);
+ SetITimer(speed, speed);
break;
case KT_toggleSpy:
spying = (!spying) && (scr2 >= 0);
break;
case KT_toggleSpy:
spying = (!spying) && (scr2 >= 0);
@@
-191,8
+204,11
@@
ExtFunc void OneGame(int scr, int scr2)
case KT_drop:
if (DropPiece(scr) > 0) {
if (spied)
case KT_drop:
if (DropPiece(scr) > 0) {
if (spied)
- SendPacket(NP_drop, 0, NULL);
- SetITimer(speed, speed);
+ SendPacket(scr, NP_drop, 0, NULL);
+ if (dropModeEnable == 2)
+ SetITimer(speed, 1); //instantdrop
+ else
+ SetITimer(speed, speed);
}
dropMode = dropModeEnable;
break;
}
dropMode = dropModeEnable;
break;
@@
-202,7
+218,7
@@
ExtFunc void OneGame(int scr, int scr2)
netint2 data[1];
data[0] = hton2(pausedByMe);
netint2 data[1];
data[0] = hton2(pausedByMe);
- SendPacket(NP_pause, sizeof(data), data);
+ SendPacket(
scr,
NP_pause, sizeof(data), data);
}
paused = pausedByMe || pausedByThem;
if (robotEnable)
}
paused = pausedByMe || pausedByThem;
if (robotEnable)
@@
-227,7
+243,7
@@
ExtFunc void OneGame(int scr, int scr2)
}
if (dropMode && DropPiece(scr) > 0) {
if (spied)
}
if (dropMode && DropPiece(scr) > 0) {
if (spied)
- SendPacket(NP_drop, 0, NULL);
+ SendPacket(
scr,
NP_drop, 0, NULL);
SetITimer(speed, speed);
}
break;
SetITimer(speed, speed);
}
break;
@@
-263,7
+279,8
@@
ExtFunc void OneGame(int scr, int scr2)
data[1] = hton2(column);
InsertJunk(scr, ntoh2(data[0]), column);
if (spied)
data[1] = hton2(column);
InsertJunk(scr, ntoh2(data[0]), column);
if (spied)
- SendPacket(NP_insertJunk, sizeof(data), data);
+ SendPacket(scr, NP_insertJunk, sizeof(data), data);
+// Message("Opponent added %d lines");
break;
}
case NP_newPiece:
break;
}
case NP_newPiece:
@@
-286,8
+303,11
@@
ExtFunc void OneGame(int scr, int scr2)
case NP_right:
MovePiece(scr2, 0, 1);
break;
case NP_right:
MovePiece(scr2, 0, 1);
break;
- case NP_rotate:
- RotatePiece(scr2);
+ case NP_rotleft:
+ RotatePiece(scr2, 0);
+ break;
+ case NP_rotright:
+ RotatePiece(scr2, 1);
break;
case NP_drop:
DropPiece(scr2);
break;
case NP_drop:
DropPiece(scr2);
@@
-338,16
+358,20
@@
ExtFunc void OneGame(int scr, int scr2)
nextPiece:
dropMode = 0;
FreezePiece(scr);
nextPiece:
dropMode = 0;
FreezePiece(scr);
- linesCleared = ClearFullLines(scr);
+ totalDrops++;
+ if ((linesCleared = ClearFullLines(scr)) > 0) {
+ totalLines += linesCleared;
+ totalAdds += linesCleared - (linesCleared < 4);
+ }
if (linesCleared > 0 && spied)
if (linesCleared > 0 && spied)
- SendPacket(NP_clear, 0, NULL);
+ SendPacket(
scr,
NP_clear, 0, NULL);
if (game == GT_classicTwo && linesCleared > 1) {
short junkLines;
netint2 data[1];
junkLines = linesCleared - (linesCleared < 4);
data[0] = hton2(junkLines);
if (game == GT_classicTwo && linesCleared > 1) {
short junkLines;
netint2 data[1];
junkLines = linesCleared - (linesCleared < 4);
data[0] = hton2(junkLines);
- SendPacket(NP_giveJunk, sizeof(data), data);
+ SendPacket(
scr,
NP_giveJunk, sizeof(data), data);
}
}
gameOver:
}
}
gameOver:
@@
-362,7
+386,7
@@
ExtFunc int main(int argc, char **argv)
standoutEnable = colorEnable = 1;
stepDownInterval = DEFAULT_INTERVAL;
MapKeys(DEFAULT_KEYS);
standoutEnable = colorEnable = 1;
stepDownInterval = DEFAULT_INTERVAL;
MapKeys(DEFAULT_KEYS);
- while ((ch = getopt(argc, argv, "hHRs:r:Fk:c:woDSCp:i:")) != -1)
+ while ((ch = getopt(argc, argv, "hHRs:r:Fk:c:wo
d
DSCp:i:")) != -1)
switch (ch) {
case 'c':
initConn = 1;
switch (ch) {
case 'c':
initConn = 1;
@@
-390,9
+414,12
@@
ExtFunc int main(int argc, char **argv)
fairRobot = 1;
myFlags |= SCF_fairRobot;
break;
fairRobot = 1;
myFlags |= SCF_fairRobot;
break;
- case '
D
':
+ case '
d
':
dropModeEnable = 1;
break;
dropModeEnable = 1;
break;
+ case 'D':
+ dropModeEnable = 2;
+ break;
case 'C':
colorEnable = 0;
break;
case 'C':
colorEnable = 0;
break;
@@
-440,7
+467,7
@@
ExtFunc int main(int argc, char **argv)
data[0] = hton4(MAJOR_VERSION);
data[1] = hton4(PROTOCOL_VERSION);
data[0] = hton4(MAJOR_VERSION);
data[1] = hton4(PROTOCOL_VERSION);
- SendPacket(NP_version, sizeof(data), data);
+ SendPacket(
0,
NP_version, sizeof(data), data);
if (WaitMyEvent(&event, EM_net) != E_net)
fatal("Network negotiation failed");
memcpy(data, event.u.net.data, sizeof(data));
if (WaitMyEvent(&event, EM_net) != E_net)
fatal("Network negotiation failed");
memcpy(data, event.u.net.data, sizeof(data));
@@
-476,7
+503,7
@@
ExtFunc int main(int argc, char **argv)
data[0] = hton4(myFlags);
data[1] = hton4(seed);
data[2] = hton4(stepDownInterval);
data[0] = hton4(myFlags);
data[1] = hton4(seed);
data[2] = hton4(stepDownInterval);
- SendPacket(NP_startConn, len, data);
+ SendPacket(
0,
NP_startConn, len, data);
if (WaitMyEvent(&event, EM_net) != E_net ||
event.u.net.type != NP_startConn)
fatal("Network negotiation failed");
if (WaitMyEvent(&event, EM_net) != E_net ||
event.u.net.type != NP_startConn)
fatal("Network negotiation failed");
@@
-508,7
+535,7
@@
ExtFunc int main(int argc, char **argv)
len = strlen(userName)+1;
if (len > sizeof(opponentName))
len = sizeof(opponentName);
len = strlen(userName)+1;
if (len > sizeof(opponentName))
len = sizeof(opponentName);
- SendPacket(NP_userName, len, userName);
+ SendPacket(
0,
NP_userName, len, userName);
if (WaitMyEvent(&event, EM_net) != E_net ||
event.u.net.type != NP_userName)
fatal("Network negotiation failed");
if (WaitMyEvent(&event, EM_net) != E_net ||
event.u.net.type != NP_userName)
fatal("Network negotiation failed");