← Back to ratslair.com
aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorr4tss <[email protected]>2021-08-25 18:55:16 +0200
committerr4tss <[email protected]>2021-08-25 19:18:40 +0200
commitbb29e4cec83329864e87bc7894c544f81a0af57a (patch)
tree5602f93505159616307b5609ceb10a835cea7c52
parent71ece3753bbf91298425d491961f2db7aca17efb (diff)
Buncha changes
-rw-r--r--nships.c116
1 files changed, 80 insertions, 36 deletions
diff --git a/nships.c b/nships.c
index b9b709c..7084bc7 100644
--- a/nships.c
+++ b/nships.c
@@ -13,8 +13,7 @@
#define height 80
#define width 200
-struct p {
- int x;
+struct p { int x;
int y;
};
@@ -45,7 +44,7 @@ struct ship {
int dir;
int len;
int live;
-}
+};
int menu(int y, int x, int h, int w, int aLen, char it[][15], char *title)
{
@@ -113,8 +112,11 @@ struct p getPlace(struct p p, WINDOW * w)
{
p.x = 1;
p.y = 1;
- int e = 0;
+ int e = 0, wh, ww;
curs_set(1);
+ getmaxyx(w, wh, ww);
+ wmove(w, p.y, p.x);
+ wrefresh(w);
for(;;)
{
switch(getch())
@@ -124,7 +126,7 @@ struct p getPlace(struct p p, WINDOW * w)
--p.y;
break;
case 115: // down
- if(p.y < 10)
+ if(p.y < wh - 2)
++p.y;
break;
case 97: // left
@@ -132,7 +134,7 @@ struct p getPlace(struct p p, WINDOW * w)
--p.x;
break;
case 100: // right
- if(p.x < 10)
+ if(p.x < ww - 2)
++p.x;
break;
case 10:
@@ -148,12 +150,13 @@ struct p getPlace(struct p p, WINDOW * w)
return p;
}
-struct ship setPlace(struct ship s, WINDOW * w)
+struct ship setPlace(WINDOW * w, int len)
{
- s.p.x = 1;
- s.p.y = 1;
- int e = 0;
- curs_set(1);
+ struct ship s = {{1, 1}, 0, len, 1};
+ int e = 0, wh, ww;
+ char character[64];
+ curs_set(0);
+ getmaxyx(w, wh, ww);
for(;;)
{
switch(getch())
@@ -163,33 +166,61 @@ struct ship setPlace(struct ship s, WINDOW * w)
s.p.y--;
break;
case 115:
- if(s.p.y < 10)
+ if(s.dir == 0 && s.p.y < wh - 2)
+ s.p.y++;
+ else if(s.dir == 1 && s.p.y + 1 < wh - s.len)
s.p.y++;
break;
case 97:
if(s.p.x > 1)
- s.p.x--;
+ s.p.x-=2;
break;
case 100:
- if(s.p.x < 10)
- s.p.x++;
+ if(s.dir == 0 && s.p.x < ww - s.len - 5)
+ s.p.x+=2;
+ else if(s.dir == 1 && s.p.x < ww - 2)
+ s.p.x+=2;
break;
case 114:
- if(s.dir == 3)
+ if(s.dir == 0) {
+ s.dir = 1;
+ if(s.p.y + s.len > wh)
+ s.p.y = s.p.y - (s.p.y + s.len - wh) - 1;
+ }
+ else {
s.dir = 0;
- else
- s.dir++;
+ if(s.p.x + s.len > ww - 5)
+ s.p.x = s.p.x - (s.p.x + s.len - ww) - ;
+ }
break;
- case 82:
- if(s.dir == 0)
- s.dir = 3;
- else
- s.dir--;
case 10:
e = 1;
break;
}
- wmove(w, s.p.y, s.p.x);
+ wclear(w);
+ box(w, 0, 0);
+ mvwprintw(w, 0, 0, "%i, %i", s.p.x, ww - s.len - 2);
+ for(int l=0;l<s.len;++l)
+ {
+ if(s.dir == 0) {
+ if(l == 0)
+ strcpy(character, "<");
+ else if(l == s.len - 1)
+ strcpy(character, ">");
+ else
+ strcpy(character, "-");
+ mvwprintw(w, s.p.y, s.p.x + (l * 2), "%s", character);
+ }
+ else {
+ if(l == 0)
+ strcpy(character, "^");
+ else if(l == s.len - 1)
+ strcpy(character, "v");
+ else
+ strcpy(character, "|");
+ mvwprintw(w, s.p.y + l, s.p.x, "%s", character);
+ }
+ }
wrefresh(w);
if(e == 1)
break;
@@ -201,14 +232,15 @@ int main()
struct player p1, p2;
struct p p1p[256], p2p[256];
struct items start = {3, {"Host Game", "Join Game", "Exit"}};
- int state = 0, e = 0, sfd, round = 0, host, p0i = 0, p2i = 0, phase = 0;
+ struct ship p1s[5], p2s[5];
+ int state = 3, e = 0, sfd, round = 0, host, p1i = 0, p2i = 0, phase = 0, l;
char ip[128];
initscr();
curs_set(0);
noecho();
- WINDOW * p1w = newwin(30, 45, 1, 0);
- WINDOW * p2w = newwin(30, 45, 1, 45);
+ WINDOW * p1w = newwin(12, 22, 1, 0);
+ WINDOW * p2w = newwin(12, 22, 1, 22);
refresh();
while(e == 0)
{
@@ -275,13 +307,25 @@ int main()
switch(phase)
{
case 0: // Choose ship locations
- switch(host)
+ for(int s=0;s<6;++s)
{
- case 0:
- break;
- case 1:
- break;
+ if(s < 3)
+ l = 3;
+ else if(s < 4)
+ l = 4;
+ else
+ l = 5;
+ switch(host)
+ {
+ case 0:
+ setPlace(p2w, l);
+ break;
+ case 1:
+ setPlace(p1w, l);
+ break;
+ }
}
+ phase = 1;
break;
case 1: // Play the game
switch(round)
@@ -289,11 +333,11 @@ int main()
case 0:
if(host == 0) {
p2p[p2i] = getPlace(p2.p, p2w);
- send(sfd, p2p[p2i], sizeof(p2p[p2i]), 0);
+ //send(sfd, p2p[p2i], sizeof(p2p[p2i]), 0);
}
else {
printw("%s's turn", p2.name);
- recv(sfd, p2p[p2i], sizeof(p2p[p2i]), 0);
+ //recv(sfd, p2p[p2i], sizeof(p2p[p2i]), 0);
}
++p2i;
round = 1;
@@ -301,11 +345,11 @@ int main()
case 1:
if(host == 1) {
p1p[p1i] = getPlace(p1.p, p1w);
- send(sfd, p1p[p1i], sizeof(p1p[p1i]), 0);
+ //send(sfd, p1p[p1i], sizeof(p1p[p1i]), 0);
}
else {
printw("%s's turn", p1.name);
- recv(sfd, p1p[p1i], sizeof(p1p[p1i]), 0);
+ //recv(sfd, p1p[p1i], sizeof(p1p[p1i]), 0);
}
++p1i;
round = 0;