Module Name:    src
Committed By:   rillig
Date:           Sun Jun 19 10:23:48 UTC 2022

Modified Files:
        src/games/gomoku: bdinit.c gomoku.h makemove.c

Log Message:
gomoku: reduce usage of magic numbers in the code

No binary change.


To generate a diff of this commit:
cvs rdiff -u -r1.35 -r1.36 src/games/gomoku/bdinit.c
cvs rdiff -u -r1.55 -r1.56 src/games/gomoku/gomoku.h
cvs rdiff -u -r1.42 -r1.43 src/games/gomoku/makemove.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/games/gomoku/bdinit.c
diff -u src/games/gomoku/bdinit.c:1.35 src/games/gomoku/bdinit.c:1.36
--- src/games/gomoku/bdinit.c:1.35	Sun May 29 16:30:44 2022
+++ src/games/gomoku/bdinit.c	Sun Jun 19 10:23:48 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: bdinit.c,v 1.35 2022/05/29 16:30:44 rillig Exp $	*/
+/*	$NetBSD: bdinit.c,v 1.36 2022/06/19 10:23:48 rillig Exp $	*/
 
 /*
  * Copyright (c) 1994
@@ -34,7 +34,7 @@
 
 #include <sys/cdefs.h>
 /*	from: @(#)bdinit.c	8.2 (Berkeley) 5/3/95	*/
-__RCSID("$NetBSD: bdinit.c,v 1.35 2022/05/29 16:30:44 rillig Exp $");
+__RCSID("$NetBSD: bdinit.c,v 1.36 2022/06/19 10:23:48 rillig Exp $");
 
 #include <string.h>
 #include "gomoku.h"
@@ -47,59 +47,56 @@ init_spot_flags_and_fval(struct spotstr 
 
 	sp->s_flags = 0;
 	if (row < 5) {
-		/* directions 1, 2, 3 are blocked */
-		sp->s_flags |= (BFLAG << 1) | (BFLAG << 2) |
-		    (BFLAG << 3);
-		sp->s_fval[BLACK][1].s = 0x600;
-		sp->s_fval[BLACK][2].s = 0x600;
-		sp->s_fval[BLACK][3].s = 0x600;
-		sp->s_fval[WHITE][1].s = 0x600;
-		sp->s_fval[WHITE][2].s = 0x600;
-		sp->s_fval[WHITE][3].s = 0x600;
+		set_blocked(sp, DIR_DR);
+		set_blocked(sp, DIR_D_);
+		set_blocked(sp, DIR_DL);
+		sp->s_fval[BLACK][DIR_DR].s = 0x600;
+		sp->s_fval[BLACK][DIR_D_].s = 0x600;
+		sp->s_fval[BLACK][DIR_DL].s = 0x600;
+		sp->s_fval[WHITE][DIR_DR].s = 0x600;
+		sp->s_fval[WHITE][DIR_D_].s = 0x600;
+		sp->s_fval[WHITE][DIR_DL].s = 0x600;
 	} else if (row == 5) {
 		/* five spaces, blocked on one side */
-		sp->s_fval[BLACK][1].s = 0x500;
-		sp->s_fval[BLACK][2].s = 0x500;
-		sp->s_fval[BLACK][3].s = 0x500;
-		sp->s_fval[WHITE][1].s = 0x500;
-		sp->s_fval[WHITE][2].s = 0x500;
-		sp->s_fval[WHITE][3].s = 0x500;
+		sp->s_fval[BLACK][DIR_DR].s = 0x500;
+		sp->s_fval[BLACK][DIR_D_].s = 0x500;
+		sp->s_fval[BLACK][DIR_DL].s = 0x500;
+		sp->s_fval[WHITE][DIR_DR].s = 0x500;
+		sp->s_fval[WHITE][DIR_D_].s = 0x500;
+		sp->s_fval[WHITE][DIR_DL].s = 0x500;
 	} else {
 		/* six spaces, not blocked */
-		sp->s_fval[BLACK][1].s = 0x401;
-		sp->s_fval[BLACK][2].s = 0x401;
-		sp->s_fval[BLACK][3].s = 0x401;
-		sp->s_fval[WHITE][1].s = 0x401;
-		sp->s_fval[WHITE][2].s = 0x401;
-		sp->s_fval[WHITE][3].s = 0x401;
+		sp->s_fval[BLACK][DIR_DR].s = 0x401;
+		sp->s_fval[BLACK][DIR_D_].s = 0x401;
+		sp->s_fval[BLACK][DIR_DL].s = 0x401;
+		sp->s_fval[WHITE][DIR_DR].s = 0x401;
+		sp->s_fval[WHITE][DIR_D_].s = 0x401;
+		sp->s_fval[WHITE][DIR_DL].s = 0x401;
 	}
 	if (col > (BSZ - 4)) {
-		/* directions 0, 1 are blocked */
-		sp->s_flags |= BFLAG | (BFLAG << 1);
-		sp->s_fval[BLACK][0].s = 0x600;
-		sp->s_fval[BLACK][1].s = 0x600;
-		sp->s_fval[WHITE][0].s = 0x600;
-		sp->s_fval[WHITE][1].s = 0x600;
+		set_blocked(sp, DIR__R);
+		set_blocked(sp, DIR_DR);
+		sp->s_fval[BLACK][DIR__R].s = 0x600;
+		sp->s_fval[BLACK][DIR_DR].s = 0x600;
+		sp->s_fval[WHITE][DIR__R].s = 0x600;
+		sp->s_fval[WHITE][DIR_DR].s = 0x600;
 	} else if (col == (BSZ - 4)) {
-		sp->s_fval[BLACK][0].s = 0x500;
-		sp->s_fval[WHITE][0].s = 0x500;
-		/* if direction 1 is not blocked */
-		if ((sp->s_flags & (BFLAG << 1)) == 0) {
-			sp->s_fval[BLACK][1].s = 0x500;
-			sp->s_fval[WHITE][1].s = 0x500;
+		sp->s_fval[BLACK][DIR__R].s = 0x500;
+		sp->s_fval[WHITE][DIR__R].s = 0x500;
+		if (!is_blocked(sp, DIR_DR)) {
+			sp->s_fval[BLACK][DIR_DR].s = 0x500;
+			sp->s_fval[WHITE][DIR_DR].s = 0x500;
 		}
 	} else {
-		sp->s_fval[BLACK][0].s = 0x401;
-		sp->s_fval[WHITE][0].s = 0x401;
+		sp->s_fval[BLACK][DIR__R].s = 0x401;
+		sp->s_fval[WHITE][DIR__R].s = 0x401;
 		if (col < 5) {
-			/* direction 3 is blocked */
-			sp->s_flags |= (BFLAG << 3);
-			sp->s_fval[BLACK][3].s = 0x600;
-			sp->s_fval[WHITE][3].s = 0x600;
-		} else if (col == 5 &&
-		    (sp->s_flags & (BFLAG << 3)) == 0) {
-			sp->s_fval[BLACK][3].s = 0x500;
-			sp->s_fval[WHITE][3].s = 0x500;
+			set_blocked(sp, DIR_DL);
+			sp->s_fval[BLACK][DIR_DL].s = 0x600;
+			sp->s_fval[WHITE][DIR_DL].s = 0x600;
+		} else if (col == 5 && !is_blocked(sp, DIR_DL)) {
+			sp->s_fval[BLACK][DIR_DL].s = 0x500;
+			sp->s_fval[WHITE][DIR_DL].s = 0x500;
 		}
 	}
 }
@@ -110,7 +107,7 @@ init_spot_frame(struct spotstr *sp, fram
 {
 
 	for (direction r = 4; r-- > 0; ) {
-		if ((sp->s_flags & (BFLAG << r)) != 0)
+		if (is_blocked(sp, r))
 			continue;
 
 		frame_index fi = (*fip)++;
@@ -247,7 +244,7 @@ init_overlap_frame(int fia, int ra, int 
 			const struct spotstr *spb0 = &board[s - offb * db];
 			if (spb0->s_occ == BORDER)
 				break;
-			if ((spb0->s_flags & BFLAG << rb) != 0)
+			if (is_blocked(spb0, rb))
 				continue;
 
 			frame_index fib = spb0->s_frame[rb];

Index: src/games/gomoku/gomoku.h
diff -u src/games/gomoku/gomoku.h:1.55 src/games/gomoku/gomoku.h:1.56
--- src/games/gomoku/gomoku.h:1.55	Sun May 29 17:01:42 2022
+++ src/games/gomoku/gomoku.h	Sun Jun 19 10:23:48 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: gomoku.h,v 1.55 2022/05/29 17:01:42 rillig Exp $	*/
+/*	$NetBSD: gomoku.h,v 1.56 2022/06/19 10:23:48 rillig Exp $	*/
 
 /*
  * Copyright (c) 1994
@@ -200,6 +200,10 @@ typedef unsigned short frame_index;
 
 /* 0 = right, 1 = down right, 2 = down, 3 = down left. */
 typedef unsigned char direction;
+#define DIR__R		0		/* right */
+#define DIR_DR		1		/* down right */
+#define DIR_D_		2		/* down */
+#define DIR_DL		3		/* down left */
 
 /*
  * One spot structure for each location on the board.
@@ -231,6 +235,18 @@ struct	spotstr {
 #define BFLAG		0x010000	/* frame intersects border or dead */
 #define BFLAGALL	0x0F0000	/* all frames dead */
 
+static inline bool
+is_blocked(const struct spotstr *sp, direction r)
+{
+	return (sp->s_flags & (BFLAG << r)) != 0;
+}
+
+static inline void
+set_blocked(struct spotstr *sp, direction r)
+{
+	sp->s_flags |= BFLAG << r;
+}
+
 struct game {
 	unsigned int	nmoves;		/* number of played moves */
 	spot_index	moves[BSZ * BSZ]; /* log of all played moves */

Index: src/games/gomoku/makemove.c
diff -u src/games/gomoku/makemove.c:1.42 src/games/gomoku/makemove.c:1.43
--- src/games/gomoku/makemove.c:1.42	Sun May 29 17:01:42 2022
+++ src/games/gomoku/makemove.c	Sun Jun 19 10:23:48 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: makemove.c,v 1.42 2022/05/29 17:01:42 rillig Exp $	*/
+/*	$NetBSD: makemove.c,v 1.43 2022/06/19 10:23:48 rillig Exp $	*/
 
 /*
  * Copyright (c) 1994
@@ -34,7 +34,7 @@
 
 #include <sys/cdefs.h>
 /*	@(#)makemove.c	8.2 (Berkeley) 5/3/95	*/
-__RCSID("$NetBSD: makemove.c,v 1.42 2022/05/29 17:01:42 rillig Exp $");
+__RCSID("$NetBSD: makemove.c,v 1.43 2022/06/19 10:23:48 rillig Exp $");
 
 #include "gomoku.h"
 
@@ -121,7 +121,7 @@ makemove(player_color us, spot_index mv)
 	    for (int f = 5; --f >= 0; fsp -= d) {	/* for each frame */
 		if (fsp->s_occ == BORDER)
 		    goto nextr;
-		if ((fsp->s_flags & BFLAG << r) != 0)
+		if (is_blocked(fsp, r))
 		    continue;
 
 		struct combostr *cbp = &frames[fsp->s_frame[r]];
@@ -139,8 +139,8 @@ makemove(player_color us, spot_index mv)
 		    else if (sp->s_occ == EMPTY)
 			sp->s_wval -= val;
 		    else {
-			/* this frame is now blocked, adjust values */
-			fsp->s_flags |= BFLAG << r;
+			set_blocked(fsp, r);
+			/* adjust values */
 			fsp->s_fval[BLACK][r].s = 0x600;
 			fsp->s_fval[WHITE][r].s = 0x600;
 			while (off-- > 0) {
@@ -290,7 +290,7 @@ update_overlap_different_direction(spot_
 		const struct spotstr *sp = &board[os - db * off];
 		if (sp->s_occ == BORDER)
 			break;
-		if ((sp->s_flags & BFLAG << rb) != 0)
+		if (is_blocked(sp, rb))
 			continue;
 
 		frame_index b = sp->s_frame[rb];
@@ -314,7 +314,7 @@ update_overlap(spot_index os)
 	    for (int f = 0; f < 6; f++, s1 -= d) {
 		if (board[s1].s_occ == BORDER)
 		    break;
-		if ((board[s1].s_flags & BFLAG << r) != 0)
+		if (is_blocked(&board[s1], r))
 		    continue;
 
 		/*
@@ -330,7 +330,7 @@ update_overlap(spot_index os)
 		for (int off = f + 1; off < 6; off++, s2 -= d) {
 		    if (board[s2].s_occ == BORDER)
 			break;
-		    if ((board[s2].s_flags & BFLAG << r) != 0)
+		    if (is_blocked(&board[s2], r))
 			continue;
 
 		    update_overlap_same_direction(s1, s2, a, d, off - f, r);

Reply via email to