= 왜? 이런짓을 하는가? = Powerbuilder로 해본김에 늘 같이 작업하던 MS-SQL로 해보았습니다. = MS-SQL Query = {{{~cpp IF EXISTS(SELECT name FROM sysobjects WHERE name = N'temp_queen_attack' AND type = 'U') DROP TABLE temp_queen_attack GO CREATE TABLE temp_queen_attack( y int NULL, x1 int NULL, x2 int NULL, x3 int NULL, x4 int NULL, x5 int NULL, x6 int NULL, x7 int NULL, x8 int NULL, fx int NULL, fy int NULL) GO IF EXISTS (SELECT name FROM sysobjects WHERE name = N'p_temp_reset' AND type = 'P') DROP PROCEDURE p_temp_reset GO CREATE PROCEDURE p_temp_reset AS TRUNCATE TABLE temp_queen_attack INSERT INTO temp_queen_attack VALUES(1,0,0,0,0,0,0,0,0,0,0) INSERT INTO temp_queen_attack VALUES(2,0,0,0,0,0,0,0,0,0,0) INSERT INTO temp_queen_attack VALUES(3,0,0,0,0,0,0,0,0,0,0) INSERT INTO temp_queen_attack VALUES(4,0,0,0,0,0,0,0,0,0,0) INSERT INTO temp_queen_attack VALUES(5,0,0,0,0,0,0,0,0,0,0) INSERT INTO temp_queen_attack VALUES(6,0,0,0,0,0,0,0,0,0,0) INSERT INTO temp_queen_attack VALUES(7,0,0,0,0,0,0,0,0,0,0) INSERT INTO temp_queen_attack VALUES(8,0,0,0,0,0,0,0,0,0,0) GO IF EXISTS (SELECT name FROM sysobjects WHERE name = N'p_check_attack' AND type = 'P') DROP PROCEDURE p_check_attack GO CREATE PROCEDURE p_check_attack @x int, @y int AS DECLARE @attack_check int, @local_x int, @local_y int SELECT @attack_check = (CASE @x WHEN 1 THEN x1 WHEN 2 THEN x2 WHEN 3 THEN x3 WHEN 4 THEN x4 WHEN 5 THEN x5 WHEN 6 THEN x6 WHEN 7 THEN x7 WHEN 8 THEN x8 END) FROM temp_queen_attack WHERE y = @y IF @attack_check = 1 RETURN 1 --@x에 해당하는 컬럼을 공격루트셋팅 IF @x = 1 UPDATE temp_queen_attack SET x1 = 1 IF @x = 2 UPDATE temp_queen_attack SET x2 = 1 IF @x = 3 UPDATE temp_queen_attack SET x3 = 1 IF @x = 4 UPDATE temp_queen_attack SET x4 = 1 IF @x = 5 UPDATE temp_queen_attack SET x5 = 1 IF @x = 6 UPDATE temp_queen_attack SET x6 = 1 IF @x = 7 UPDATE temp_queen_attack SET x7 = 1 IF @x = 8 UPDATE temp_queen_attack SET x8 = 1 --@y에 해당하는 컬럼을 공격루트셋팅 UPDATE temp_queen_attack SET x1 = 1,x2 = 1,x3 = 1,x4 = 1,x5 = 1,x6 = 1,x7 = 1,x8 = 1 WHERE y = @y --@x,@y에서 @x+n,@y+n방향으로 공격루트셋팅 SET @local_x = @x SET @local_y = @y IF @local_x > @local_y BEGIN SET @local_x = @local_x + (1 - @local_y) SET @local_y = 1 END IF @local_x < @local_y BEGIN SET @local_y = @local_y + (1 - @local_x) SET @local_x = 1 END IF @local_x = @local_y BEGIN SET @local_x = 1 SET @local_y = 1 END WHILE @local_x <= 8 AND @local_y <= 8 BEGIN IF @local_x = 1 UPDATE temp_queen_attack SET x1 = 1 WHERE y = @local_y IF @local_x = 2 UPDATE temp_queen_attack SET x2 = 1 WHERE y = @local_y IF @local_x = 3 UPDATE temp_queen_attack SET x3 = 1 WHERE y = @local_y IF @local_x = 4 UPDATE temp_queen_attack SET x4 = 1 WHERE y = @local_y IF @local_x = 5 UPDATE temp_queen_attack SET x5 = 1 WHERE y = @local_y IF @local_x = 6 UPDATE temp_queen_attack SET x6 = 1 WHERE y = @local_y IF @local_x = 7 UPDATE temp_queen_attack SET x7 = 1 WHERE y = @local_y IF @local_x = 8 UPDATE temp_queen_attack SET x8 = 1 WHERE y = @local_y SET @local_x = @local_x + 1 SET @local_y = @local_y + 1 END --@x,@y에서 @x-n,@y+n방향으로 공격루트셋팅 SET @local_x = 9 - @x SET @local_y = @y IF @local_x > @local_y BEGIN SET @local_x = @local_x + (1 - @local_y) SET @local_y = 1 END IF @local_x < @local_y BEGIN SET @local_y = @local_y + (1 - @local_x) SET @local_x = 1 END IF @local_x = @local_y BEGIN SET @local_x = 1 SET @local_y = 1 END WHILE @local_x <= 8 AND @local_y <= 8 BEGIN IF 9- @local_x = 1 UPDATE temp_queen_attack SET x1 = 1 WHERE y = @local_y IF 9- @local_x = 2 UPDATE temp_queen_attack SET x2 = 1 WHERE y = @local_y IF 9- @local_x = 3 UPDATE temp_queen_attack SET x3 = 1 WHERE y = @local_y IF 9- @local_x = 4 UPDATE temp_queen_attack SET x4 = 1 WHERE y = @local_y IF 9- @local_x = 5 UPDATE temp_queen_attack SET x5 = 1 WHERE y = @local_y IF 9- @local_x = 6 UPDATE temp_queen_attack SET x6 = 1 WHERE y = @local_y IF 9- @local_x = 7 UPDATE temp_queen_attack SET x7 = 1 WHERE y = @local_y IF 9- @local_x = 8 UPDATE temp_queen_attack SET x8 = 1 WHERE y = @local_y -- il_attack[9 - li_x,li_y] = 1 SET @local_x = @local_x + 1 SET @local_y = @local_y + 1 END RETURN 0 GO IF EXISTS (SELECT name FROM sysobjects WHERE name = N'p_create_queen' AND type = 'P') DROP PROCEDURE p_create_queen GO CREATE PROCEDURE p_create_queen @queen_count int, @create_limit int AS DECLARE @l_x int, @l_y int, @rtn_check int WHILE @queen_count <= 8 BEGIN SET @l_x = convert(int, RAND() * 8) + 1 SET @l_y = convert(int, RAND() * 8) + 1 SET @create_limit = @create_limit + 1 IF @create_limit >= 64 BEGIN SET @queen_count = 1 SET @create_limit = 1 RETURN 0 END EXEC @rtn_check = p_check_attack @l_x, @l_y IF @rtn_check = 1 CONTINUE SET @queen_count = @queen_count + 1 SET @create_limit = 1 UPDATE temp_queen_attack SET fx = @l_x, fy = @l_y WHERE y = @queen_count - 1 END RETURN 1 GO IF EXISTS (SELECT name FROM sysobjects WHERE name = N'p_queen' AND type = 'P') DROP PROCEDURE p_queen GO CREATE PROCEDURE p_queen AS EXEC p_temp_reset DECLARE @queen_count int, @create_limit int, @rtn_create int SET @queen_count = 1 SET @create_limit = 1 EXEC @rtn_create = p_create_queen @queen_count,@create_limit IF @rtn_create = 0 EXEC p_queen GO EXEC p_queen GO SELECT y AS 'Queen', fx AS 'X Position', fy AS 'Y Position' FROM temp_queen_attack GO }}}