Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 460dfd608e | |||
| 13e79eb490 |
@@ -1,120 +0,0 @@
|
|||||||
//using System.Drawing;
|
|
||||||
//using System.Numerics;
|
|
||||||
|
|
||||||
//namespace BoardRules;
|
|
||||||
|
|
||||||
//public static class PieceMoves
|
|
||||||
//{
|
|
||||||
// public static readonly ICollection<Vector2> GoldGeneralMoves =
|
|
||||||
// [
|
|
||||||
// new(-1, 1),
|
|
||||||
// new(0, 1),
|
|
||||||
// new(1, 1),
|
|
||||||
// new(-1, 0),
|
|
||||||
// new(1, 0),
|
|
||||||
// new(0, -1)
|
|
||||||
// ];
|
|
||||||
|
|
||||||
// public static readonly ICollection<Vector2> PawnMoves = [new(0, 1)];
|
|
||||||
|
|
||||||
// public static readonly ICollection<Vector2> KnightMoves = [new(-1, 2), new(1, 2)];
|
|
||||||
|
|
||||||
// public static readonly ICollection<Vector2> BishopMoves =
|
|
||||||
// [
|
|
||||||
// new(float.NegativeInfinity, float.NegativeInfinity),
|
|
||||||
// new(float.NegativeInfinity, float.PositiveInfinity),
|
|
||||||
// new(float.PositiveInfinity, float.PositiveInfinity),
|
|
||||||
// new(float.PositiveInfinity, float.NegativeInfinity),
|
|
||||||
// ];
|
|
||||||
//}
|
|
||||||
|
|
||||||
//public class BoardRules
|
|
||||||
//{
|
|
||||||
// private readonly Dictionary<string, IPiece> pieces = [];
|
|
||||||
|
|
||||||
// public BoardRules WithSize(int width, int height)
|
|
||||||
// {
|
|
||||||
// this.BoardSize = new Size(width, height);
|
|
||||||
// return this;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// public Size BoardSize { get; private set; }
|
|
||||||
|
|
||||||
// public BoardRules AddPiece(IPiece piece)
|
|
||||||
// {
|
|
||||||
// pieces.Add(piece.Name, piece);
|
|
||||||
// return this;
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
//public class BoardPieceRules(BoardRules rules, IPiece piece)
|
|
||||||
//{
|
|
||||||
// public IPiece Piece { get; } = piece;
|
|
||||||
// public BoardRules WithStartingPositions(ICollection<Vector2> positions)
|
|
||||||
// {
|
|
||||||
// // Validate positions against board size
|
|
||||||
// foreach (var pos in positions)
|
|
||||||
// {
|
|
||||||
// if (pos.X < 0 || pos.Y < 0 || pos.X >= rules.BoardSize.Width || pos.Y >= rules.BoardSize.Height)
|
|
||||||
// {
|
|
||||||
// throw new ArgumentOutOfRangeException(nameof(positions), $"Position {pos} is out of bounds for board size {rules.BoardSize}.");
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// // Assuming piece has a way to set starting positions, which it currently does not.
|
|
||||||
// // This is just a placeholder to show intent.
|
|
||||||
// // piece.SetStartingPositions(positions);
|
|
||||||
// return rules;
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
//public interface IPiece
|
|
||||||
//{
|
|
||||||
// public string Name { get; }
|
|
||||||
// public ICollection<Vector2> MoveSet { get; }
|
|
||||||
// public ICollection<Vector2> PromotedMoveSet { get; }
|
|
||||||
|
|
||||||
// /// <summary>
|
|
||||||
// /// The starting positions for this type of piece on the board. There could be one or many.
|
|
||||||
// /// </summary>
|
|
||||||
// public ICollection<Vector2> StartingPositions { get; }
|
|
||||||
//}
|
|
||||||
|
|
||||||
//public class GoldGeneral : IPiece
|
|
||||||
//{
|
|
||||||
// public string Name => nameof(GoldGeneral);
|
|
||||||
// public ICollection<Vector2> MoveSet => PieceMoves.GoldGeneralMoves;
|
|
||||||
// public ICollection<Vector2> PromotedMoveSet => PieceMoves.GoldGeneralMoves;
|
|
||||||
|
|
||||||
// public ICollection<Vector2> StartingPositions => [new(3, 0), new(5, 0), new(4, 1)];
|
|
||||||
//}
|
|
||||||
|
|
||||||
//public class Pawn : IPiece
|
|
||||||
//{
|
|
||||||
// public string Name => nameof(Pawn);
|
|
||||||
// public ICollection<Vector2> MoveSet => PieceMoves.PawnMoves;
|
|
||||||
// public ICollection<Vector2> PromotedMoveSet => PieceMoves.GoldGeneralMoves;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//public class Knight : IPiece
|
|
||||||
//{
|
|
||||||
// public string Name => nameof(Knight);
|
|
||||||
// public ICollection<Vector2> MoveSet => PieceMoves.KnightMoves;
|
|
||||||
// public ICollection<Vector2> PromotedMoveSet => PieceMoves.GoldGeneralMoves;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//public class Bishop : IPiece
|
|
||||||
//{
|
|
||||||
// public string Name => nameof(Bishop);
|
|
||||||
// public ICollection<Vector2> MoveSet => PieceMoves.BishopMoves;
|
|
||||||
// public ICollection<Vector2> PromotedMoveSet => PieceMoves.BishopMoves;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//public class Luke
|
|
||||||
//{
|
|
||||||
// public void Yep()
|
|
||||||
// {
|
|
||||||
// var board = new BoardRules()
|
|
||||||
// .WithSize(9, 9)
|
|
||||||
// .AddPiece(new Pawn())
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<TargetFramework>net8.0</TargetFramework>
|
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
|
||||||
<Nullable>enable</Nullable>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
</Project>
|
|
||||||
@@ -92,6 +92,7 @@ public class ShogiApplication(
|
|||||||
if (moveResult.IsSuccess)
|
if (moveResult.IsSuccess)
|
||||||
{
|
{
|
||||||
await sessionRepository.CreateMove(sessionId, command);
|
await sessionRepository.CreateMove(sessionId, command);
|
||||||
|
await sessionRepository.CreateState(session);
|
||||||
await gameHubContext.Emit_PieceMoved(sessionId);
|
await gameHubContext.Emit_PieceMoved(sessionId);
|
||||||
return new NoContentResult();
|
return new NoContentResult();
|
||||||
}
|
}
|
||||||
@@ -128,4 +129,38 @@ public class ShogiApplication(
|
|||||||
|
|
||||||
return userManager.Users.FirstOrDefault(u => u.Id == userId)?.UserName!;
|
return userManager.Users.FirstOrDefault(u => u.Id == userId)?.UserName!;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<IActionResult> ReadSessionSnapshots(string sessionId)
|
||||||
|
{
|
||||||
|
var session = this.ReadSession(sessionId);
|
||||||
|
if (session == null)
|
||||||
|
{
|
||||||
|
return new NotFoundResult();
|
||||||
|
}
|
||||||
|
|
||||||
|
var snapshots = await queryRepository.ReadSessionSnapshots(sessionId);
|
||||||
|
|
||||||
|
var boardStates = snapshots.Select(snap => new Contracts.Types.BoardState
|
||||||
|
{
|
||||||
|
Board = snap.Board.ToDictionary(
|
||||||
|
kvp => kvp.Key,
|
||||||
|
kvp => kvp.Value == null
|
||||||
|
? null
|
||||||
|
: new Contracts.Types.Piece
|
||||||
|
{
|
||||||
|
IsPromoted = kvp.Value.IsPromoted,
|
||||||
|
Owner = (Contracts.Types.WhichPlayer)kvp.Value.Owner,
|
||||||
|
WhichPiece = (Contracts.Types.WhichPiece)kvp.Value.WhichPiece,
|
||||||
|
}),
|
||||||
|
Player1Hand = snap.Player1Hand.Cast<Contracts.Types.WhichPiece>().ToArray(),
|
||||||
|
Player2Hand = snap.Player2Hand.Cast<Contracts.Types.WhichPiece>().ToArray(),
|
||||||
|
PlayerInCheck = snap.PlayerInCheck == null ? null : (Contracts.Types.WhichPlayer)snap.PlayerInCheck,
|
||||||
|
Victor = snap.IsGameOver
|
||||||
|
? snap.PlayerInCheck == Repositories.Dto.SessionState.WhichPlayer.Player1 ? Contracts.Types.WhichPlayer.Player2 : Contracts.Types.WhichPlayer.Player1
|
||||||
|
: null,
|
||||||
|
WhoseTurn = (Contracts.Types.WhichPlayer)snap.WhoseTurn,
|
||||||
|
});
|
||||||
|
|
||||||
|
return new OkObjectResult(boardStates.ToArray());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,8 +65,8 @@ public class SessionsController(
|
|||||||
BoardState = new BoardState
|
BoardState = new BoardState
|
||||||
{
|
{
|
||||||
Board = session.Board.BoardState.State.ToContract(),
|
Board = session.Board.BoardState.State.ToContract(),
|
||||||
Player1Hand = session.Board.BoardState.Player1Hand.ToContract(),
|
Player1Hand = session.Board.BoardState.Player1Hand.Select(p => p.WhichPiece.ToContract()).ToArray(),
|
||||||
Player2Hand = session.Board.BoardState.Player2Hand.ToContract(),
|
Player2Hand = session.Board.BoardState.Player2Hand.Select(p => p.WhichPiece.ToContract()).ToArray(),
|
||||||
PlayerInCheck = session.Board.BoardState.InCheck?.ToContract(),
|
PlayerInCheck = session.Board.BoardState.InCheck?.ToContract(),
|
||||||
WhoseTurn = session.Board.BoardState.WhoseTurn.ToContract(),
|
WhoseTurn = session.Board.BoardState.WhoseTurn.ToContract(),
|
||||||
Victor = session.Board.BoardState.IsCheckmate
|
Victor = session.Board.BoardState.IsCheckmate
|
||||||
@@ -118,4 +118,14 @@ public class SessionsController(
|
|||||||
|
|
||||||
return await application.MovePiece(id, sessionId, command);
|
return await application.MovePiece(id, sessionId, command);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns an array of board states, one per player move of the given session, in the same order that player moves occurred.
|
||||||
|
/// </summary>
|
||||||
|
[HttpGet("{sessionId}/History")]
|
||||||
|
[AllowAnonymous]
|
||||||
|
public async Task<IActionResult> GetHistory([FromRoute] string sessionId)
|
||||||
|
{
|
||||||
|
return await application.ReadSessionSnapshots(sessionId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,14 +38,6 @@ public static class ContractsExtensions
|
|||||||
WhichPiece = piece.WhichPiece.ToContract()
|
WhichPiece = piece.WhichPiece.ToContract()
|
||||||
};
|
};
|
||||||
|
|
||||||
public static IReadOnlyList<Piece> ToContract(this List<Domain.ValueObjects.Piece> pieces)
|
|
||||||
{
|
|
||||||
return pieces
|
|
||||||
.Select(ToContract)
|
|
||||||
.ToList()
|
|
||||||
.AsReadOnly();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Dictionary<string, Piece?> ToContract(this ReadOnlyDictionary<string, Domain.ValueObjects.Piece?> boardState) =>
|
public static Dictionary<string, Piece?> ToContract(this ReadOnlyDictionary<string, Domain.ValueObjects.Piece?> boardState) =>
|
||||||
boardState.ToDictionary(kvp => kvp.Key, kvp => kvp.Value?.ToContract());
|
boardState.ToDictionary(kvp => kvp.Key, kvp => kvp.Value?.ToContract());
|
||||||
|
|
||||||
|
|||||||
34
Shogi.Api/Repositories/Dto/SessionState/Piece.cs
Normal file
34
Shogi.Api/Repositories/Dto/SessionState/Piece.cs
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
namespace Shogi.Api.Repositories.Dto.SessionState;
|
||||||
|
|
||||||
|
public class Piece
|
||||||
|
{
|
||||||
|
public bool IsPromoted { get; set; }
|
||||||
|
public WhichPiece WhichPiece { get; set; }
|
||||||
|
public WhichPlayer Owner { get; set; }
|
||||||
|
|
||||||
|
public Piece() { }
|
||||||
|
|
||||||
|
public Piece(Domain.ValueObjects.Piece piece)
|
||||||
|
{
|
||||||
|
IsPromoted = piece.IsPromoted;
|
||||||
|
WhichPiece = piece.WhichPiece switch
|
||||||
|
{
|
||||||
|
Domain.ValueObjects.WhichPiece.Bishop => WhichPiece.Bishop,
|
||||||
|
Domain.ValueObjects.WhichPiece.GoldGeneral => WhichPiece.GoldGeneral,
|
||||||
|
Domain.ValueObjects.WhichPiece.King => WhichPiece.King,
|
||||||
|
Domain.ValueObjects.WhichPiece.SilverGeneral => WhichPiece.SilverGeneral,
|
||||||
|
Domain.ValueObjects.WhichPiece.Rook => WhichPiece.Rook,
|
||||||
|
Domain.ValueObjects.WhichPiece.Knight => WhichPiece.Knight,
|
||||||
|
Domain.ValueObjects.WhichPiece.Lance => WhichPiece.Lance,
|
||||||
|
Domain.ValueObjects.WhichPiece.Pawn => WhichPiece.Pawn,
|
||||||
|
_ => throw new NotImplementedException()
|
||||||
|
};
|
||||||
|
|
||||||
|
Owner = piece.Owner switch
|
||||||
|
{
|
||||||
|
Domain.ValueObjects.WhichPlayer.Player1 => WhichPlayer.Player1,
|
||||||
|
Domain.ValueObjects.WhichPlayer.Player2 => WhichPlayer.Player2,
|
||||||
|
_ => throw new NotImplementedException()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
namespace Shogi.Api.Repositories.Dto.SessionState;
|
||||||
|
|
||||||
|
public class SessionStateDocument
|
||||||
|
{
|
||||||
|
public long Id { get; set; }
|
||||||
|
|
||||||
|
public Dictionary<string, Piece?> Board { get; set; }
|
||||||
|
|
||||||
|
public WhichPiece[] Player1Hand { get; set; }
|
||||||
|
|
||||||
|
public WhichPiece[] Player2Hand { get; set; }
|
||||||
|
|
||||||
|
public WhichPlayer? PlayerInCheck { get; set; }
|
||||||
|
|
||||||
|
public WhichPlayer WhoseTurn { get; set; }
|
||||||
|
|
||||||
|
public bool IsGameOver { get; set; }
|
||||||
|
|
||||||
|
public string DocumentVersion { get; set; } = "1";
|
||||||
|
|
||||||
|
public SessionStateDocument() { }
|
||||||
|
public SessionStateDocument(Domain.ValueObjects.BoardState boardState)
|
||||||
|
{
|
||||||
|
this.Board = boardState.State.ToDictionary(
|
||||||
|
kvp => kvp.Key,
|
||||||
|
kvp => kvp.Value == null ? null : new Piece(kvp.Value));
|
||||||
|
|
||||||
|
this.Player1Hand = boardState.Player1Hand
|
||||||
|
.Select(piece => Map(piece.WhichPiece))
|
||||||
|
.ToArray();
|
||||||
|
|
||||||
|
this.Player2Hand = boardState.Player2Hand
|
||||||
|
.Select(piece => Map(piece.WhichPiece))
|
||||||
|
.ToArray();
|
||||||
|
|
||||||
|
this.PlayerInCheck = boardState.InCheck.HasValue
|
||||||
|
? Map(boardState.InCheck.Value)
|
||||||
|
: null;
|
||||||
|
|
||||||
|
this.IsGameOver = boardState.IsCheckmate;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static WhichPiece Map(Domain.ValueObjects.WhichPiece whichPiece)
|
||||||
|
{
|
||||||
|
return whichPiece switch
|
||||||
|
{
|
||||||
|
Domain.ValueObjects.WhichPiece.Bishop => WhichPiece.Bishop,
|
||||||
|
Domain.ValueObjects.WhichPiece.GoldGeneral => WhichPiece.GoldGeneral,
|
||||||
|
Domain.ValueObjects.WhichPiece.King => WhichPiece.King,
|
||||||
|
Domain.ValueObjects.WhichPiece.SilverGeneral => WhichPiece.SilverGeneral,
|
||||||
|
Domain.ValueObjects.WhichPiece.Rook => WhichPiece.Rook,
|
||||||
|
Domain.ValueObjects.WhichPiece.Knight => WhichPiece.Knight,
|
||||||
|
Domain.ValueObjects.WhichPiece.Lance => WhichPiece.Lance,
|
||||||
|
Domain.ValueObjects.WhichPiece.Pawn => WhichPiece.Pawn,
|
||||||
|
_ => throw new NotImplementedException()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
static WhichPlayer Map(Domain.ValueObjects.WhichPlayer whichPlayer)
|
||||||
|
{
|
||||||
|
return whichPlayer switch
|
||||||
|
{
|
||||||
|
Domain.ValueObjects.WhichPlayer.Player1 => WhichPlayer.Player1,
|
||||||
|
Domain.ValueObjects.WhichPlayer.Player2 => WhichPlayer.Player2,
|
||||||
|
_ => throw new NotImplementedException()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
13
Shogi.Api/Repositories/Dto/SessionState/WhichPiece.cs
Normal file
13
Shogi.Api/Repositories/Dto/SessionState/WhichPiece.cs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
namespace Shogi.Api.Repositories.Dto.SessionState;
|
||||||
|
|
||||||
|
public enum WhichPiece
|
||||||
|
{
|
||||||
|
King,
|
||||||
|
GoldGeneral,
|
||||||
|
SilverGeneral,
|
||||||
|
Bishop,
|
||||||
|
Rook,
|
||||||
|
Knight,
|
||||||
|
Lance,
|
||||||
|
Pawn
|
||||||
|
}
|
||||||
7
Shogi.Api/Repositories/Dto/SessionState/WhichPlayer.cs
Normal file
7
Shogi.Api/Repositories/Dto/SessionState/WhichPlayer.cs
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
namespace Shogi.Api.Repositories.Dto.SessionState;
|
||||||
|
|
||||||
|
public enum WhichPlayer
|
||||||
|
{
|
||||||
|
Player1,
|
||||||
|
Player2
|
||||||
|
}
|
||||||
@@ -1,7 +1,9 @@
|
|||||||
using Dapper;
|
using Dapper;
|
||||||
using Shogi.Api.Repositories.Dto;
|
using Shogi.Api.Repositories.Dto;
|
||||||
|
using Shogi.Api.Repositories.Dto.SessionState;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
using System.Data.SqlClient;
|
using System.Data.SqlClient;
|
||||||
|
using System.Text.Json;
|
||||||
|
|
||||||
namespace Shogi.Api.Repositories;
|
namespace Shogi.Api.Repositories;
|
||||||
|
|
||||||
@@ -21,4 +23,27 @@ public class QueryRepository(IConfiguration configuration)
|
|||||||
|
|
||||||
return await results.ReadAsync<SessionDto>();
|
return await results.ReadAsync<SessionDto>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<List<SessionStateDocument>> ReadSessionSnapshots(string sessionId)
|
||||||
|
{
|
||||||
|
using var connection = new SqlConnection(this.connectionString);
|
||||||
|
var command = connection.CreateCommand();
|
||||||
|
command.CommandText = "session.ReadStatesBySession";
|
||||||
|
command.CommandType = CommandType.StoredProcedure;
|
||||||
|
command.Parameters.AddWithValue("SessionId", sessionId);
|
||||||
|
|
||||||
|
await using var reader = await command.ExecuteReaderAsync();
|
||||||
|
var documents = new List<SessionStateDocument>(20);
|
||||||
|
while (await reader.ReadAsync())
|
||||||
|
{
|
||||||
|
var json = reader.GetString("Document");
|
||||||
|
var document = JsonSerializer.Deserialize<SessionStateDocument>(json);
|
||||||
|
if (document != null)
|
||||||
|
{
|
||||||
|
documents.Add(document);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return documents;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
using Dapper;
|
using Dapper;
|
||||||
using Shogi.Api.Repositories.Dto;
|
using Shogi.Api.Repositories.Dto;
|
||||||
|
using Shogi.Api.Repositories.Dto.SessionState;
|
||||||
using Shogi.Contracts.Api.Commands;
|
using Shogi.Contracts.Api.Commands;
|
||||||
using Shogi.Domain.Aggregates;
|
using Shogi.Domain.Aggregates;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
using System.Data.SqlClient;
|
using System.Data.SqlClient;
|
||||||
|
using System.Text.Json;
|
||||||
|
|
||||||
namespace Shogi.Api.Repositories;
|
namespace Shogi.Api.Repositories;
|
||||||
|
|
||||||
@@ -81,4 +83,19 @@ public class SessionRepository(IConfiguration configuration)
|
|||||||
},
|
},
|
||||||
commandType: CommandType.StoredProcedure);
|
commandType: CommandType.StoredProcedure);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task CreateState(Session session)
|
||||||
|
{
|
||||||
|
var document = new SessionStateDocument(session.Board.BoardState);
|
||||||
|
|
||||||
|
using var connection = new SqlConnection(this.connectionString);
|
||||||
|
await connection.ExecuteAsync(
|
||||||
|
"session.CreateState",
|
||||||
|
new
|
||||||
|
{
|
||||||
|
SessionId = session.Id.ToString(),
|
||||||
|
Document = JsonSerializer.Serialize(document)
|
||||||
|
},
|
||||||
|
commandType: CommandType.StoredProcedure);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,13 +1,12 @@
|
|||||||
using System;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
namespace Shogi.Contracts.Types;
|
namespace Shogi.Contracts.Types;
|
||||||
|
|
||||||
public class BoardState
|
public class BoardState
|
||||||
{
|
{
|
||||||
public Dictionary<string, Piece?> Board { get; set; } = new Dictionary<string, Piece?>();
|
public Dictionary<string, Piece?> Board { get; set; } = [];
|
||||||
public IReadOnlyCollection<Piece> Player1Hand { get; set; } = Array.Empty<Piece>();
|
public IReadOnlyCollection<WhichPiece> Player1Hand { get; set; } = [];
|
||||||
public IReadOnlyCollection<Piece> Player2Hand { get; set; } = Array.Empty<Piece>();
|
public IReadOnlyCollection<WhichPiece> Player2Hand { get; set; } = [];
|
||||||
public WhichPlayer? PlayerInCheck { get; set; }
|
public WhichPlayer? PlayerInCheck { get; set; }
|
||||||
public WhichPlayer WhoseTurn { get; set; }
|
public WhichPlayer WhoseTurn { get; set; }
|
||||||
public WhichPlayer? Victor { get; set; }
|
public WhichPlayer? Victor { get; set; }
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
namespace Shogi.Contracts.Types
|
namespace Shogi.Contracts.Types;
|
||||||
{
|
|
||||||
public class Piece
|
public class Piece
|
||||||
{
|
{
|
||||||
public bool IsPromoted { get; set; }
|
public bool IsPromoted { get; set; }
|
||||||
public WhichPiece WhichPiece { get; set; }
|
public WhichPiece WhichPiece { get; set; }
|
||||||
public WhichPlayer Owner { get; set; }
|
public WhichPlayer Owner { get; set; }
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|||||||
6
Shogi.Database/Session/Stored Procedures/CreateState.sql
Normal file
6
Shogi.Database/Session/Stored Procedures/CreateState.sql
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
CREATE PROCEDURE [session].[CreateState]
|
||||||
|
@SessionId [session].[SessionSurrogateKey],
|
||||||
|
@Document NVARCHAR(MAX)
|
||||||
|
AS
|
||||||
|
|
||||||
|
INSERT INTO [session].[State] (SessionId, Document) VALUES (@SessionId, @Document);
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
CREATE PROCEDURE [session].[ReadStatesBySession]
|
||||||
|
@SessionId [session].[SessionSurrogateKey]
|
||||||
|
AS
|
||||||
|
|
||||||
|
SELECT Id, SessionId, Document
|
||||||
|
FROM [session].[State]
|
||||||
|
WHERE Id = @SessionId
|
||||||
|
ORDER BY Id ASC;
|
||||||
9
Shogi.Database/Session/Tables/State.sql
Normal file
9
Shogi.Database/Session/Tables/State.sql
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
CREATE TABLE [session].[State]
|
||||||
|
(
|
||||||
|
[Id] BIGINT NOT NULL PRIMARY KEY IDENTITY,
|
||||||
|
[SessionId] [session].[SessionSurrogateKey] NOT NULL,
|
||||||
|
[Document] NVARCHAR(MAX) NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT [FK_State_ToSession] FOREIGN KEY (SessionId) REFERENCES [session].[Session](Id),
|
||||||
|
CONSTRAINT [StateDocument must be JSON] CHECK(ISJSON(Document)=1)
|
||||||
|
)
|
||||||
@@ -1,2 +1,3 @@
|
|||||||
CREATE TYPE [session].[SessionSurrogateKey]
|
-- C# Guid
|
||||||
|
CREATE TYPE [session].[SessionSurrogateKey]
|
||||||
FROM CHAR(36) NOT NULL
|
FROM CHAR(36) NOT NULL
|
||||||
|
|||||||
@@ -79,6 +79,9 @@
|
|||||||
<Build Include="Session\Stored Procedures\ReadSessionsMetadata.sql" />
|
<Build Include="Session\Stored Procedures\ReadSessionsMetadata.sql" />
|
||||||
<Build Include="AspNetUsersId.sql" />
|
<Build Include="AspNetUsersId.sql" />
|
||||||
<Build Include="Session\Functions\MaxNewSessionsPerUser.sql" />
|
<Build Include="Session\Functions\MaxNewSessionsPerUser.sql" />
|
||||||
|
<Build Include="Session\Tables\State.sql" />
|
||||||
|
<Build Include="Session\Stored Procedures\CreateState.sql" />
|
||||||
|
<Build Include="Session\Stored Procedures\ReadStatesBySession.sql" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PostDeploy Include="Post Deployment\Script.PostDeployment.sql" />
|
<PostDeploy Include="Post Deployment\Script.PostDeployment.sql" />
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using Shogi.Domain.ValueObjects.Movement;
|
using Shogi.Domain.YetToBeAssimilatedIntoDDD.Pathing;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
|
|
||||||
namespace Shogi.Domain.ValueObjects
|
namespace Shogi.Domain.ValueObjects
|
||||||
@@ -32,9 +32,3 @@ public enum WhichPiece
|
|||||||
Pawn,
|
Pawn,
|
||||||
//PromotedPawn,
|
//PromotedPawn,
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum WhichPlayer
|
|
||||||
{
|
|
||||||
Player1,
|
|
||||||
Player2
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using Shogi.Domain.ValueObjects.Movement;
|
using Shogi.Domain.YetToBeAssimilatedIntoDDD.Pathing;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
|
|
||||||
namespace Shogi.Domain.ValueObjects;
|
namespace Shogi.Domain.ValueObjects;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
using Shogi.Domain.ValueObjects.Movement;
|
using Shogi.Domain.YetToBeAssimilatedIntoDDD.Pathing;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
|
|
||||||
namespace Shogi.Domain.ValueObjects;
|
namespace Shogi.Domain.ValueObjects;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
using Shogi.Domain.ValueObjects.Movement;
|
using Shogi.Domain.YetToBeAssimilatedIntoDDD.Pathing;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
|
|
||||||
namespace Shogi.Domain.ValueObjects
|
namespace Shogi.Domain.ValueObjects
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
using Shogi.Domain.ValueObjects.Movement;
|
using Shogi.Domain.YetToBeAssimilatedIntoDDD.Pathing;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
|
|
||||||
namespace Shogi.Domain.ValueObjects
|
namespace Shogi.Domain.ValueObjects
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
using Shogi.Domain.ValueObjects.Movement;
|
using Shogi.Domain.YetToBeAssimilatedIntoDDD.Pathing;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
|
|
||||||
namespace Shogi.Domain.ValueObjects
|
namespace Shogi.Domain.ValueObjects
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
using Shogi.Domain.ValueObjects.Movement;
|
using Shogi.Domain.YetToBeAssimilatedIntoDDD.Pathing;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
|
||||||
namespace Shogi.Domain.ValueObjects
|
namespace Shogi.Domain.ValueObjects
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
using Shogi.Domain.ValueObjects.Movement;
|
using Shogi.Domain.YetToBeAssimilatedIntoDDD.Pathing;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
|
|
||||||
namespace Shogi.Domain.ValueObjects;
|
namespace Shogi.Domain.ValueObjects;
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
using Shogi.Domain.ValueObjects.Movement;
|
using Shogi.Domain.YetToBeAssimilatedIntoDDD;
|
||||||
using Shogi.Domain.YetToBeAssimilatedIntoDDD;
|
|
||||||
namespace Shogi.Domain.ValueObjects;
|
namespace Shogi.Domain.ValueObjects;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -248,7 +247,7 @@ public sealed class ShogiBoard(BoardState initialState)
|
|||||||
{
|
{
|
||||||
var list = new List<Vector2>(10);
|
var list = new List<Vector2>(10);
|
||||||
var position = path.Step + piecePosition;
|
var position = path.Step + piecePosition;
|
||||||
if (path.Distance == Distance.MultiStep)
|
if (path.Distance == YetToBeAssimilatedIntoDDD.Pathing.Distance.MultiStep)
|
||||||
{
|
{
|
||||||
|
|
||||||
while (position.IsInsideBoardBoundary())
|
while (position.IsInsideBoardBoundary())
|
||||||
@@ -341,7 +340,7 @@ public sealed class ShogiBoard(BoardState initialState)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
var multiStepPaths = matchingPaths
|
var multiStepPaths = matchingPaths
|
||||||
.Where(path => path.Distance == Distance.MultiStep)
|
.Where(path => path.Distance == YetToBeAssimilatedIntoDDD.Pathing.Distance.MultiStep)
|
||||||
.ToArray();
|
.ToArray();
|
||||||
if (multiStepPaths.Length == 0)
|
if (multiStepPaths.Length == 0)
|
||||||
{
|
{
|
||||||
@@ -372,7 +371,7 @@ public sealed class ShogiBoard(BoardState initialState)
|
|||||||
return new MoveResult(true);
|
return new MoveResult(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static IEnumerable<Vector2> GetPositionsAlongPath(Vector2 from, Vector2 to, Path path)
|
private static IEnumerable<Vector2> GetPositionsAlongPath(Vector2 from, Vector2 to, YetToBeAssimilatedIntoDDD.Pathing.Path path)
|
||||||
{
|
{
|
||||||
var next = from;
|
var next = from;
|
||||||
while (next != to && next.X >= 0 && next.X < 9 && next.Y >= 0 && next.Y < 9)
|
while (next != to && next.X >= 0 && next.X < 9 && next.Y >= 0 && next.Y < 9)
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
using Shogi.Domain.ValueObjects.Movement;
|
using Shogi.Domain.YetToBeAssimilatedIntoDDD.Pathing;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
|
|
||||||
namespace Shogi.Domain.ValueObjects
|
namespace Shogi.Domain.ValueObjects
|
||||||
7
Shogi.Domain/ValueObjects/WhichPlayer.cs
Normal file
7
Shogi.Domain/ValueObjects/WhichPlayer.cs
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
namespace Shogi.Domain.ValueObjects;
|
||||||
|
|
||||||
|
public enum WhichPlayer
|
||||||
|
{
|
||||||
|
Player1,
|
||||||
|
Player2
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
namespace Shogi.Domain.ValueObjects;
|
namespace Shogi.Domain.YetToBeAssimilatedIntoDDD.Pathing;
|
||||||
|
|
||||||
public static class Direction
|
public static class Direction
|
||||||
{
|
{
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
namespace Shogi.Domain.ValueObjects;
|
namespace Shogi.Domain.YetToBeAssimilatedIntoDDD.Pathing;
|
||||||
|
|
||||||
public enum Distance
|
public enum Distance
|
||||||
{
|
{
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
|
||||||
namespace Shogi.Domain.ValueObjects.Movement;
|
namespace Shogi.Domain.YetToBeAssimilatedIntoDDD.Pathing;
|
||||||
|
|
||||||
[DebuggerDisplay("{Step} - {Distance}")]
|
[DebuggerDisplay("{Step} - {Distance}")]
|
||||||
public record Path
|
public record Path
|
||||||
@@ -17,7 +17,7 @@ public record Path
|
|||||||
public Path(Vector2 step, Distance distance = Distance.OneStep)
|
public Path(Vector2 step, Distance distance = Distance.OneStep)
|
||||||
{
|
{
|
||||||
Step = step;
|
Step = step;
|
||||||
Distance = distance;
|
this.Distance = distance;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Path Invert() => new(Vector2.Negate(Step), Distance);
|
public Path Invert() => new(Vector2.Negate(Step), Distance);
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
namespace Shogi.UI.Identity;
|
namespace Shogi.UI.Identity;
|
||||||
|
|
||||||
using Microsoft.AspNetCore.Components.Authorization;
|
using Microsoft.AspNetCore.Components.Authorization;
|
||||||
using System.Net.Http;
|
|
||||||
using System.Net.Http.Json;
|
using System.Net.Http.Json;
|
||||||
using System.Security.Claims;
|
using System.Security.Claims;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
@@ -236,38 +235,6 @@ public class CookieAuthenticationStateProvider : AuthenticationStateProvider, IA
|
|||||||
return _authenticated;
|
return _authenticated;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Ask for an email to be sent which contains a reset code. This reset code is used during <see cref="ChangePassword"/>
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>Do not surface errors from this to users which may tell bad actors if emails do or do not exist in the system.</remarks>
|
|
||||||
public async Task<HttpResponseMessage> RequestPasswordReset(string email)
|
|
||||||
{
|
|
||||||
return await _httpClient.PostAsJsonAsync("forgotPassword", new { email });
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<FormResult> ChangePassword(string email, string resetCode, string newPassword)
|
|
||||||
{
|
|
||||||
var body = new
|
|
||||||
{
|
|
||||||
email,
|
|
||||||
resetCode,
|
|
||||||
newPassword
|
|
||||||
};
|
|
||||||
var response = await _httpClient.PostAsJsonAsync("resetPassword", body);
|
|
||||||
if (response.IsSuccessStatusCode)
|
|
||||||
{
|
|
||||||
return new FormResult { Succeeded = true };
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return new FormResult
|
|
||||||
{
|
|
||||||
Succeeded = false,
|
|
||||||
ErrorList = [await response.Content.ReadAsStringAsync()]
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class RoleClaim
|
public class RoleClaim
|
||||||
{
|
{
|
||||||
public string? Issuer { get; set; }
|
public string? Issuer { get; set; }
|
||||||
|
|||||||
@@ -28,6 +28,4 @@ public interface IAccountManagement
|
|||||||
public Task<FormResult> RegisterAsync(string email, string password);
|
public Task<FormResult> RegisterAsync(string email, string password);
|
||||||
|
|
||||||
public Task<bool> CheckAuthenticatedAsync();
|
public Task<bool> CheckAuthenticatedAsync();
|
||||||
Task<HttpResponseMessage> RequestPasswordReset(string email);
|
|
||||||
Task<FormResult> ChangePassword(string email, string resetCode, string newPassword);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,12 @@
|
|||||||
.MainLayout {
|
.MainLayout {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-rows: auto 1fr;
|
grid-template-columns: auto 1fr;
|
||||||
|
grid-template-rows: 100vh;
|
||||||
place-items: stretch;
|
place-items: stretch;
|
||||||
gap: 5px;
|
}
|
||||||
|
|
||||||
|
@media all and (max-width: 600px) {
|
||||||
|
.MainLayout {
|
||||||
|
grid-template-columns: min-content max-content;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,77 +1,44 @@
|
|||||||
@inject NavigationManager navigator
|
@inject NavigationManager navigator
|
||||||
@inject ShogiApi Api
|
@inject ShogiApi Api
|
||||||
|
|
||||||
@* Desktop view *@
|
<div class="NavMenu PrimaryTheme ThemeVariant--Contrast">
|
||||||
<nav class="NavMenu PrimaryTheme ThemeVariant--Contrast">
|
|
||||||
<h1>Shogi</h1>
|
<h1>Shogi</h1>
|
||||||
|
<p>
|
||||||
<a href="">Home</a>
|
<a href="">Home</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
<a href="search">Search</a>
|
<a href="search">Search</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
<AuthorizeView>
|
<AuthorizeView>
|
||||||
|
<p>
|
||||||
<button class="href" @onclick="CreateSession">Create</button>
|
<button class="href" @onclick="CreateSession">Create</button>
|
||||||
|
</p>
|
||||||
</AuthorizeView>
|
</AuthorizeView>
|
||||||
|
|
||||||
<div class="spacer" />
|
<div class="spacer" />
|
||||||
|
|
||||||
<AuthorizeView>
|
<AuthorizeView>
|
||||||
<Authorized>
|
<Authorized>
|
||||||
<span>@context.User.Identity?.Name</span>
|
<p>@context.User.Identity?.Name</p>
|
||||||
|
<p>
|
||||||
<a href="logout">Logout</a>
|
<a href="logout">Logout</a>
|
||||||
|
</p>
|
||||||
</Authorized>
|
</Authorized>
|
||||||
<NotAuthorized>
|
<NotAuthorized>
|
||||||
|
<p>
|
||||||
<a href="login">Login</a>
|
<a href="login">Login</a>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
<a href="register">Register</a>
|
<a href="register">Register</a>
|
||||||
|
</p>
|
||||||
</NotAuthorized>
|
</NotAuthorized>
|
||||||
</AuthorizeView>
|
</AuthorizeView>
|
||||||
</nav>
|
|
||||||
|
|
||||||
@* Mobile view *@
|
|
||||||
<nav class="NavMenu PrimaryTheme ThemeVariant--Contrast compact">
|
|
||||||
<div class="flex">
|
|
||||||
<h1>Shogi</h1>
|
|
||||||
<AuthorizeView>
|
|
||||||
<span>@context.User.Identity?.Name</span>
|
|
||||||
</AuthorizeView>
|
|
||||||
<button class="href" @onclick="() => isExpanded = !isExpanded">
|
|
||||||
@(isExpanded ? "Collapse" : "Expand")
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="drop-down @ExpandedCss">
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
<a href="">Home</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="search">Search</a>
|
|
||||||
</li>
|
|
||||||
<AuthorizeView>
|
|
||||||
<Authorized>
|
|
||||||
|
|
||||||
<li>
|
|
||||||
<button class="href" @onclick="CreateSession">Create</button>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="logout">Logout</a>
|
|
||||||
</li>
|
|
||||||
</Authorized>
|
|
||||||
<NotAuthorized>
|
|
||||||
<li>
|
|
||||||
<a href="login">Login</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="register">Register</a>
|
|
||||||
</li>
|
|
||||||
</NotAuthorized>
|
|
||||||
</AuthorizeView>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
private bool isExpanded = false;
|
|
||||||
|
|
||||||
async Task CreateSession()
|
async Task CreateSession()
|
||||||
{
|
{
|
||||||
@@ -82,5 +49,4 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
string ExpandedCss => isExpanded ? "expand" : string.Empty;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,45 +1,15 @@
|
|||||||
.NavMenu {
|
.NavMenu {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: baseline;
|
flex-direction: column;
|
||||||
gap: 0.75rem;
|
border-right: 2px solid #444;
|
||||||
|
}
|
||||||
|
|
||||||
|
.NavMenu > * {
|
||||||
padding: 0 0.5rem;
|
padding: 0 0.5rem;
|
||||||
}
|
}
|
||||||
|
.NavMenu h1 {
|
||||||
|
}
|
||||||
|
|
||||||
.NavMenu .spacer {
|
.NavMenu .spacer {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************/
|
|
||||||
/* Mobile Nav Menu*/
|
|
||||||
/******************/
|
|
||||||
|
|
||||||
.NavMenu.compact {
|
|
||||||
/* display is changed in @media */
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.NavMenu.compact .flex {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
}
|
|
||||||
|
|
||||||
.NavMenu.compact .drop-down {
|
|
||||||
height: 0;
|
|
||||||
overflow-y: clip;
|
|
||||||
transition: height 0.25s ease-in;
|
|
||||||
}
|
|
||||||
|
|
||||||
.NavMenu.compact .drop-down.expand {
|
|
||||||
height: 100px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@media all and (max-width: 750px) {
|
|
||||||
.NavMenu.compact {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.NavMenu {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -34,6 +34,7 @@
|
|||||||
</main>
|
</main>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
private bool show = true;
|
||||||
private string activeSessionName = string.Empty;
|
private string activeSessionName = string.Empty;
|
||||||
private Task OnLoginChanged()
|
private Task OnLoginChanged()
|
||||||
{
|
{
|
||||||
@@ -45,4 +46,10 @@
|
|||||||
activeSessionName = s.SessionId.ToString();
|
activeSessionName = s.SessionId.ToString();
|
||||||
StateHasChanged();
|
StateHasChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnClickClose()
|
||||||
|
{
|
||||||
|
show = false;
|
||||||
|
StateHasChanged();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,125 +0,0 @@
|
|||||||
@page "/forgot"
|
|
||||||
@inject IAccountManagement Acct
|
|
||||||
|
|
||||||
<main class="PrimaryTheme">
|
|
||||||
<h1>Forgot Password</h1>
|
|
||||||
|
|
||||||
|
|
||||||
@if (isReset)
|
|
||||||
{
|
|
||||||
<p>Your password has been reset. Log in with your new password any time.</p>
|
|
||||||
} else if (isCodeSent)
|
|
||||||
{
|
|
||||||
<p>Look for an email from shogi@lucaserver.space with a reset code and fill out the form.</p>
|
|
||||||
}
|
|
||||||
|
|
||||||
<section class="ForgotForm">
|
|
||||||
@if (errorList.Length > 0)
|
|
||||||
{
|
|
||||||
<ul class="Errors" style="grid-area: errors">
|
|
||||||
@foreach (var error in errorList)
|
|
||||||
{
|
|
||||||
<li>@error</li>
|
|
||||||
}
|
|
||||||
</ul>
|
|
||||||
}
|
|
||||||
|
|
||||||
<label>
|
|
||||||
Email
|
|
||||||
@if (!isCodeSent)
|
|
||||||
{
|
|
||||||
<input required name="email" type="email" @bind-value="email" />
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
<span>@email</span>
|
|
||||||
}
|
|
||||||
</label>
|
|
||||||
|
|
||||||
@if (!isCodeSent)
|
|
||||||
{
|
|
||||||
<button @onclick="SendResetCode">Send a reset code</button>
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
<label>
|
|
||||||
Reset code
|
|
||||||
<input required name="resetCode" type="text" @bind-value="code" />
|
|
||||||
</label>
|
|
||||||
|
|
||||||
<label>
|
|
||||||
New Password
|
|
||||||
<input required name="newPassword" type="password" @bind-value="newPassword" />
|
|
||||||
</label>
|
|
||||||
<label>
|
|
||||||
Confirm Password
|
|
||||||
<input required name="confirmPassword" type="password" @bind-value="confirmPassword" />
|
|
||||||
</label>
|
|
||||||
|
|
||||||
<button @onclick="ChangePassword">Change my password</button>
|
|
||||||
}
|
|
||||||
</section>
|
|
||||||
</main>
|
|
||||||
|
|
||||||
@code {
|
|
||||||
|
|
||||||
private bool isCodeSent = false;
|
|
||||||
private bool isReset = false;
|
|
||||||
private string email = string.Empty;
|
|
||||||
private string code = string.Empty;
|
|
||||||
private string newPassword = string.Empty;
|
|
||||||
private string confirmPassword = string.Empty;
|
|
||||||
private string[] errorList = [];
|
|
||||||
|
|
||||||
async Task SendResetCode()
|
|
||||||
{
|
|
||||||
if (string.IsNullOrWhiteSpace(email))
|
|
||||||
{
|
|
||||||
errorList = ["Email is required"];
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var response = await Acct.RequestPasswordReset(email);
|
|
||||||
isCodeSent = response.IsSuccessStatusCode;
|
|
||||||
if (!response.IsSuccessStatusCode)
|
|
||||||
{
|
|
||||||
errorList = [await response.Content.ReadAsStringAsync()];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async Task ChangePassword()
|
|
||||||
{
|
|
||||||
var errors = new List<string>(5);
|
|
||||||
if (string.IsNullOrWhiteSpace(email))
|
|
||||||
{
|
|
||||||
errors.Add("Email is required");
|
|
||||||
}
|
|
||||||
if (string.IsNullOrWhiteSpace(code))
|
|
||||||
{
|
|
||||||
errors.Add("Reset code is required");
|
|
||||||
}
|
|
||||||
if (string.IsNullOrWhiteSpace(newPassword))
|
|
||||||
{
|
|
||||||
errors.Add("New password is required");
|
|
||||||
}
|
|
||||||
if (!newPassword.Equals(confirmPassword))
|
|
||||||
{
|
|
||||||
errors.Add("Your new password and confirm password do not match");
|
|
||||||
}
|
|
||||||
|
|
||||||
var result = await Acct.ChangePassword(email, code, newPassword);
|
|
||||||
if (result.Succeeded)
|
|
||||||
{
|
|
||||||
isReset = true;
|
|
||||||
ClearFormFields();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
errorList = result.ErrorList;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ClearFormFields() {
|
|
||||||
email = code = newPassword = confirmPassword = string.Empty;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
main {
|
|
||||||
padding: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ForgotForm {
|
|
||||||
display: inline-flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: stretch;
|
|
||||||
gap: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ForgotForm label {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
gap: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ForgotForm button {
|
|
||||||
align-self: end;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ForgotForm .Errors {
|
|
||||||
color: darkred;
|
|
||||||
background-color: var(--foregroundColor)
|
|
||||||
}
|
|
||||||
@@ -27,8 +27,6 @@
|
|||||||
<label for="password" style="grid-area: passLabel">Password</label>
|
<label for="password" style="grid-area: passLabel">Password</label>
|
||||||
<input required id="password" name="passwordInput" type="password" style="grid-area: passControl" @bind-value="password" />
|
<input required id="password" name="passwordInput" type="password" style="grid-area: passControl" @bind-value="password" />
|
||||||
|
|
||||||
<a href="forgot" style="grid-area: resetLink; place-self: end;">Reset password</a>
|
|
||||||
|
|
||||||
<button style="grid-area: button" @onclick="DoLoginAsync">Login</button>
|
<button style="grid-area: button" @onclick="DoLoginAsync">Login</button>
|
||||||
</NotAuthorized>
|
</NotAuthorized>
|
||||||
</AuthorizeView>
|
</AuthorizeView>
|
||||||
|
|||||||
@@ -1,20 +1,28 @@
|
|||||||
main {
|
main {
|
||||||
padding: 1rem;
|
/*display: grid;
|
||||||
|
grid-template-areas:
|
||||||
|
"header header header"
|
||||||
|
". form ."
|
||||||
|
". . .";
|
||||||
|
grid-template-rows: auto 1fr 1fr;
|
||||||
|
|
||||||
|
place-items: center;
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
.LoginForm {
|
.LoginForm {
|
||||||
grid-area: form;
|
grid-area: form;
|
||||||
|
|
||||||
display: inline-grid;
|
display: inline-grid;
|
||||||
grid-template-areas:
|
grid-template-areas:
|
||||||
"errors errors"
|
"errors errors"
|
||||||
"emailLabel emailControl"
|
"emailLabel emailControl"
|
||||||
"passLabel passControl"
|
"passLabel passControl"
|
||||||
". resetLink"
|
|
||||||
"button button";
|
"button button";
|
||||||
gap: 0.5rem 3rem;
|
gap: 0.5rem 3rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.LoginForm .Errors {
|
.LoginForm .Errors {
|
||||||
color: darkred;
|
color: darkred;
|
||||||
background-color: var(--foregroundColor);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,18 @@
|
|||||||
@using System.Text.Json;
|
@using System.Text.Json;
|
||||||
|
|
||||||
<article class="game-board">
|
<article class="game-board">
|
||||||
|
<!-- Controls -->
|
||||||
|
<header class="controls">
|
||||||
|
<form @onsubmit:preventDefault>
|
||||||
|
<fieldset class="history" disabled=@Yep>
|
||||||
|
<legend>Replay</legend>
|
||||||
|
<button disabled=@Yep><</button>
|
||||||
|
<button>></button>
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
</header>
|
||||||
<!-- Game board -->
|
<!-- Game board -->
|
||||||
<section class="board" data-perspective="@Perspective" style="grid-area: board">
|
<section class="board" data-perspective="@Perspective">
|
||||||
@for (var rank = 1; rank < 10; rank++)
|
@for (var rank = 1; rank < 10; rank++)
|
||||||
{
|
{
|
||||||
foreach (var file in Files)
|
foreach (var file in Files)
|
||||||
@@ -11,20 +21,17 @@
|
|||||||
var position = $"{file}{rank}";
|
var position = $"{file}{rank}";
|
||||||
var piece = Session?.BoardState.Board[position];
|
var piece = Session?.BoardState.Board[position];
|
||||||
var isSelected = piece != null && SelectedPosition == position;
|
var isSelected = piece != null && SelectedPosition == position;
|
||||||
<div class="tile"
|
<div class="tile" @onclick="OnClickTileInternal(position)"
|
||||||
@onclick="OnClickTileInternal(position)"
|
|
||||||
data-position="@(position)"
|
data-position="@(position)"
|
||||||
data-selected="@(isSelected)"
|
data-selected="@(isSelected)"
|
||||||
data-upsidedown="@(piece?.Owner != Perspective)"
|
|
||||||
style="grid-area: @position">
|
style="grid-area: @position">
|
||||||
@if (piece != null)
|
@if (piece != null)
|
||||||
{
|
{
|
||||||
<GamePiece Piece="piece.WhichPiece" IsPromoted="piece.IsPromoted" />
|
<GamePiece Piece="piece.WhichPiece" RenderUpsideDown="@(piece.Owner != Perspective)" IsPromoted="piece.IsPromoted" />
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</section>
|
|
||||||
<div class="ruler vertical" style="grid-area: rank">
|
<div class="ruler vertical" style="grid-area: rank">
|
||||||
<span>9</span>
|
<span>9</span>
|
||||||
<span>8</span>
|
<span>8</span>
|
||||||
@@ -47,80 +54,62 @@
|
|||||||
<span>H</span>
|
<span>H</span>
|
||||||
<span>I</span>
|
<span>I</span>
|
||||||
</div>
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
<!-- Side board -->
|
<!-- Side board -->
|
||||||
@if (Session != null && UseSideboard == true)
|
@if (Session != null && UseSideboard == true)
|
||||||
{
|
{
|
||||||
@* <aside class="side-board PrimaryTheme ThemeVariant--Contrast" style="grid-area: opponent-side-board"> *@
|
<aside class="side-board PrimaryTheme ThemeVariant--Contrast">
|
||||||
@* @if (opponentHand.Any()) *@
|
<div class="player-area">
|
||||||
@* { *@
|
<div class="hand">
|
||||||
@* @foreach (var piece in opponentHand) *@
|
@if (opponentHand.Any())
|
||||||
@* { *@
|
|
||||||
@* <div class="tile" *@
|
|
||||||
@* data-upsidedown="@(piece.Owner != Perspective)"> *@
|
|
||||||
@* <GamePiece Piece="piece.WhichPiece" IsPromoted="false" /> *@
|
|
||||||
@* </div> *@
|
|
||||||
@* } *@
|
|
||||||
@* } *@
|
|
||||||
@* </aside> *@
|
|
||||||
|
|
||||||
<aside class="side-board PrimaryTheme ThemeVariant--Contrast" style="grid-area: opponent-side-board">
|
|
||||||
@if (OpponentHandGrouped.Any())
|
|
||||||
{
|
{
|
||||||
@foreach (var (whichPiece, count) in OpponentHandGrouped)
|
@foreach (var piece in opponentHand)
|
||||||
{
|
{
|
||||||
<div class="tile"
|
<div class="tile">
|
||||||
data-upsidedown>
|
<GamePiece Piece="piece" RenderUpsideDown="true" />
|
||||||
<GamePiece Piece="whichPiece" IsPromoted="false" Count="count"/>
|
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</aside>
|
|
||||||
|
|
||||||
<div class="player-info" style="grid-area: opponent-info">
|
|
||||||
<OpponentName Name="@opponentName"
|
|
||||||
IsTurn="!IsMyTurn"
|
|
||||||
InCheck="IsOpponentInCheck"
|
|
||||||
IsVictor="IsOpponentVictor" />
|
|
||||||
</div>
|
</div>
|
||||||
<div class="player-info" style="grid-area: player-info">
|
<p class="text-center">Opponent's Hand</p>
|
||||||
<PlayerName Name="@userName"
|
|
||||||
IsTurn="IsMyTurn"
|
|
||||||
InCheck="IsPlayerInCheck"
|
|
||||||
IsVictor="IsPlayerVictor" />
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<AuthorizeView>
|
<div class="place-self-center">
|
||||||
<Authorized>
|
<PlayerName Name="@opponentName" IsTurn="!IsMyTurn" InCheck="IsOpponentInCheck" IsVictor="IsOpponentVictor" />
|
||||||
<aside class="side-board PrimaryTheme ThemeVariant--Contrast" style="grid-area: player-side-board">
|
<hr />
|
||||||
|
<PlayerName Name="@userName" IsTurn="IsMyTurn" InCheck="IsPlayerInCheck" IsVictor="IsPlayerVictor" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="player-area">
|
||||||
@if (Perspective == WhichPlayer.Player2 && string.IsNullOrEmpty(Session.Player2))
|
@if (Perspective == WhichPlayer.Player2 && string.IsNullOrEmpty(Session.Player2))
|
||||||
{
|
{
|
||||||
|
<AuthorizeView>
|
||||||
<div class="place-self-center">
|
<div class="place-self-center">
|
||||||
<button @onclick="OnClickJoinGameInternal">Join Game</button>
|
<button @onclick="OnClickJoinGameInternal">Join Game</button>
|
||||||
</div>
|
</div>
|
||||||
|
</AuthorizeView>
|
||||||
}
|
}
|
||||||
else if (userHand.Any())
|
else
|
||||||
{
|
{
|
||||||
@foreach (var piece in userHand)
|
<p class="text-center">Your Hand</p>
|
||||||
|
<div class="hand">
|
||||||
|
@if (userHand.Any())
|
||||||
{
|
{
|
||||||
<div @onclick="OnClickHandInternal(piece)"
|
@foreach (var whichPiece in userHand)
|
||||||
|
{
|
||||||
|
<div @onclick="OnClickHandInternal(whichPiece)"
|
||||||
class="tile"
|
class="tile"
|
||||||
data-selected="@(piece.WhichPiece == SelectedPieceFromHand)">
|
data-selected="@(whichPiece == SelectedPieceFromHand)">
|
||||||
<GamePiece Piece="piece.WhichPiece" IsPromoted="false" />
|
<GamePiece Piece="whichPiece" RenderUpsideDown="false" />
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</aside>
|
</div>
|
||||||
</Authorized>
|
|
||||||
<NotAuthorized>
|
|
||||||
<aside class="login-to-play PrimaryTheme ThemeVariant--Contrast" style="grid-area: player-side-board">
|
|
||||||
@if (Perspective == WhichPlayer.Player2 && string.IsNullOrEmpty(Session.Player2))
|
|
||||||
{
|
|
||||||
<p><a href="login">Log in</a> to play!</p>
|
|
||||||
}
|
}
|
||||||
|
</div>
|
||||||
|
|
||||||
</aside>
|
</aside>
|
||||||
</NotAuthorized>
|
|
||||||
</AuthorizeView>
|
|
||||||
}
|
}
|
||||||
</article>
|
</article>
|
||||||
|
|
||||||
@@ -138,29 +127,35 @@
|
|||||||
[Parameter] public WhichPiece? SelectedPieceFromHand { get; set; }
|
[Parameter] public WhichPiece? SelectedPieceFromHand { get; set; }
|
||||||
// TODO: Exchange these OnClick actions for events like "SelectionChangedEvent" and "MoveFromBoardEvent" and "MoveFromHandEvent".
|
// TODO: Exchange these OnClick actions for events like "SelectionChangedEvent" and "MoveFromBoardEvent" and "MoveFromHandEvent".
|
||||||
[Parameter] public EventCallback<string> OnClickTile { get; set; }
|
[Parameter] public EventCallback<string> OnClickTile { get; set; }
|
||||||
[Parameter] public EventCallback<Piece> OnClickHand { get; set; }
|
[Parameter] public EventCallback<WhichPiece> OnClickHand { get; set; }
|
||||||
[Parameter] public EventCallback OnClickJoinGame { get; set; }
|
[Parameter] public EventCallback OnClickJoinGame { get; set; }
|
||||||
[Parameter] public bool UseSideboard { get; set; } = true;
|
[Parameter] public bool UseSideboard { get; set; } = true;
|
||||||
private IReadOnlyCollection<Piece> opponentHand;
|
[Parameter] public IList<BoardState> History { get; set; }
|
||||||
private IReadOnlyCollection<Piece> userHand;
|
|
||||||
|
private bool Yep => History.Count == 0;
|
||||||
|
|
||||||
|
private IReadOnlyCollection<WhichPiece> opponentHand;
|
||||||
|
private IReadOnlyCollection<WhichPiece> userHand;
|
||||||
private string? userName;
|
private string? userName;
|
||||||
private string? opponentName;
|
private string? opponentName;
|
||||||
|
private int historyIndex;
|
||||||
|
|
||||||
public GameBoardPresentation()
|
public GameBoardPresentation()
|
||||||
{
|
{
|
||||||
opponentHand = Array.Empty<Piece>();
|
opponentHand = [];
|
||||||
userHand = Array.Empty<Piece>();
|
userHand = [];
|
||||||
userName = string.Empty;
|
userName = string.Empty;
|
||||||
opponentName = string.Empty;
|
opponentName = string.Empty;
|
||||||
|
History = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnParametersSet()
|
protected override void OnParametersSet()
|
||||||
{
|
{
|
||||||
base.OnParametersSet();
|
base.OnParametersSet();
|
||||||
|
|
||||||
if (Session == null)
|
if (Session == null)
|
||||||
{
|
{
|
||||||
opponentHand = Array.Empty<Piece>();
|
opponentHand = [];
|
||||||
userHand = Array.Empty<Piece>();
|
userHand = [];
|
||||||
userName = string.Empty;
|
userName = string.Empty;
|
||||||
opponentName = string.Empty;
|
opponentName = string.Empty;
|
||||||
}
|
}
|
||||||
@@ -179,13 +174,12 @@
|
|||||||
? this.Session.Player2 ?? "Empty Seat"
|
? this.Session.Player2 ?? "Empty Seat"
|
||||||
: this.Session.Player1;
|
: this.Session.Player1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Console.WriteLine("Count: {0}", History.Count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private Dictionary<WhichPiece, int> OpponentHandGrouped => opponentHand.GroupBy(piece => piece.WhichPiece).ToDictionary(grouping => grouping.Key, grouping => grouping.Count());
|
|
||||||
private Dictionary<WhichPiece, int> PlayerHandGrouped => userHand.GroupBy(piece => piece.WhichPiece).ToDictionary(grouping => grouping.Key, grouping => grouping.Count());
|
|
||||||
|
|
||||||
private bool IsMyTurn => Session?.BoardState.WhoseTurn == Perspective;
|
private bool IsMyTurn => Session?.BoardState.WhoseTurn == Perspective;
|
||||||
private bool IsPlayerInCheck => Session?.BoardState.PlayerInCheck == Perspective;
|
private bool IsPlayerInCheck => Session?.BoardState.PlayerInCheck == Perspective;
|
||||||
private bool IsOpponentInCheck => Session?.BoardState.PlayerInCheck != null && Session.BoardState.PlayerInCheck != Perspective;
|
private bool IsOpponentInCheck => Session?.BoardState.PlayerInCheck != null && Session.BoardState.PlayerInCheck != Perspective;
|
||||||
@@ -201,7 +195,7 @@
|
|||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
};
|
};
|
||||||
|
|
||||||
private Func<Task> OnClickHandInternal(Piece piece) => () =>
|
private Func<Task> OnClickHandInternal(WhichPiece piece) => () =>
|
||||||
{
|
{
|
||||||
if (IsMyTurn)
|
if (IsMyTurn)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,57 +1,50 @@
|
|||||||
.game-board {
|
.game-board {
|
||||||
--ratio: 0.9;
|
--ratio: 0.9;
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-areas:
|
grid-template-columns: min-content repeat(9, minmax(2rem, 4rem)) max-content;
|
||||||
"rank board opponent-side-board"
|
grid-template-rows: auto repeat(9, 1fr) auto;
|
||||||
"rank board opponent-info"
|
|
||||||
"rank board player-info"
|
|
||||||
"rank board player-side-board"
|
|
||||||
". file .";
|
|
||||||
grid-template-columns: auto 1fr auto;
|
|
||||||
grid-template-rows: 3fr 1fr 1fr 3fr auto;
|
|
||||||
background-color: #444;
|
background-color: #444;
|
||||||
gap: 5px;
|
gap: 3px;
|
||||||
place-self: center;
|
place-self: center;
|
||||||
color: beige;
|
|
||||||
}
|
|
||||||
|
|
||||||
.game-board [data-upsidedown] {
|
|
||||||
transform: rotateZ(180deg);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.board {
|
.board {
|
||||||
display: grid;
|
display: grid;
|
||||||
|
grid-column: span 10;
|
||||||
|
grid-row: span 10;
|
||||||
grid-template-areas:
|
grid-template-areas:
|
||||||
"A9 B9 C9 D9 E9 F9 G9 H9 I9"
|
"rank A9 B9 C9 D9 E9 F9 G9 H9 I9"
|
||||||
"A8 B8 C8 D8 E8 F8 G8 H8 I8"
|
"rank A8 B8 C8 D8 E8 F8 G8 H8 I8"
|
||||||
"A7 B7 C7 D7 E7 F7 G7 H7 I7"
|
"rank A7 B7 C7 D7 E7 F7 G7 H7 I7"
|
||||||
"A6 B6 C6 D6 E6 F6 G6 H6 I6"
|
"rank A6 B6 C6 D6 E6 F6 G6 H6 I6"
|
||||||
"A5 B5 C5 D5 E5 F5 G5 H5 I5"
|
"rank A5 B5 C5 D5 E5 F5 G5 H5 I5"
|
||||||
"A4 B4 C4 D4 E4 F4 G4 H4 I4"
|
"rank A4 B4 C4 D4 E4 F4 G4 H4 I4"
|
||||||
"A3 B3 C3 D3 E3 F3 G3 H3 I3"
|
"rank A3 B3 C3 D3 E3 F3 G3 H3 I3"
|
||||||
"A2 B2 C2 D2 E2 F2 G2 H2 I2"
|
"rank A2 B2 C2 D2 E2 F2 G2 H2 I2"
|
||||||
"A1 B1 C1 D1 E1 F1 G1 H1 I1";
|
"rank A1 B1 C1 D1 E1 F1 G1 H1 I1"
|
||||||
grid-template-columns: repeat(9, 1fr);
|
". file file file file file file file file file";
|
||||||
grid-template-rows: repeat(9, 1fr);
|
grid-template-columns: subgrid;
|
||||||
|
grid-template-rows: subgrid;
|
||||||
background-color: #444444;
|
background-color: #444444;
|
||||||
gap: 3px;
|
max-height: 100%;
|
||||||
max-height: 80vmin;
|
|
||||||
aspect-ratio: var(--ratio);
|
aspect-ratio: var(--ratio);
|
||||||
}
|
}
|
||||||
|
|
||||||
.board[data-perspective="Player2"] {
|
.board[data-perspective="Player2"] {
|
||||||
grid-template-areas:
|
grid-template-areas:
|
||||||
"I1 H1 G1 F1 E1 D1 C1 B1 A1"
|
"rank I1 H1 G1 F1 E1 D1 C1 B1 A1"
|
||||||
"I2 H2 G2 F2 E2 D2 C2 B2 A2"
|
"rank I2 H2 G2 F2 E2 D2 C2 B2 A2"
|
||||||
"I3 H3 G3 F3 E3 D3 C3 B3 A3"
|
"rank I3 H3 G3 F3 E3 D3 C3 B3 A3"
|
||||||
"I4 H4 G4 F4 E4 D4 C4 B4 A4"
|
"rank I4 H4 G4 F4 E4 D4 C4 B4 A4"
|
||||||
"I5 H5 G5 F5 E5 D5 C5 B5 A5"
|
"rank I5 H5 G5 F5 E5 D5 C5 B5 A5"
|
||||||
"I6 H6 G6 F6 E6 D6 C6 B6 A6"
|
"rank I6 H6 G6 F6 E6 D6 C6 B6 A6"
|
||||||
"I7 H7 G7 F7 E7 D7 C7 B7 A7"
|
"rank I7 H7 G7 F7 E7 D7 C7 B7 A7"
|
||||||
"I8 H8 G8 F8 E8 D8 C8 B8 A8"
|
"rank I8 H8 G8 F8 E8 D8 C8 B8 A8"
|
||||||
"I9 H9 G9 F9 E9 D9 C9 B9 A9";
|
"rank I9 H9 G9 F9 E9 D9 C9 B9 A9"
|
||||||
|
". file file file file file file file file file";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.tile {
|
.tile {
|
||||||
display: grid;
|
display: grid;
|
||||||
place-content: center;
|
place-content: center;
|
||||||
@@ -84,58 +77,46 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.side-board {
|
.side-board {
|
||||||
display: grid;
|
grid-row: span 9;
|
||||||
grid-template-columns: repeat(auto-fill, 3rem);
|
|
||||||
place-items: end start;
|
|
||||||
gap: 5px;
|
|
||||||
padding: 0.25rem;
|
|
||||||
background: linear-gradient(45deg, beige, white);
|
|
||||||
}
|
|
||||||
|
|
||||||
.side-board.opponent {
|
|
||||||
place-items: start;
|
|
||||||
}
|
|
||||||
|
|
||||||
.side-board:empty {
|
|
||||||
content: 'Captured Pieces';
|
|
||||||
}
|
|
||||||
|
|
||||||
.player-info {
|
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
justify-content: space-around;
|
place-content: space-between;
|
||||||
align-content: stretch;
|
padding: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.login-to-play {
|
.side-board .player-area {
|
||||||
background: linear-gradient(45deg, beige, white);
|
|
||||||
display: grid;
|
display: grid;
|
||||||
place-content: center;
|
place-items: stretch;
|
||||||
min-height: 2rem;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@media all and (max-width: 750px) {
|
.side-board .hand {
|
||||||
|
display: grid;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
grid-template-columns: repeat(auto-fill, 3rem);
|
||||||
|
grid-template-rows: 3rem;
|
||||||
|
place-items: center start;
|
||||||
|
padding: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.controls {
|
||||||
|
grid-column: span 11;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.controls .history {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@media all and (max-width: 1000px) {
|
||||||
.game-board {
|
.game-board {
|
||||||
grid-template-areas:
|
grid-template-columns: min-content repeat(9, minmax(2rem, 4rem));
|
||||||
". opponent-side-board"
|
grid-template-rows: repeat(9, 1fr) auto max-content;
|
||||||
". opponent-info"
|
|
||||||
"rank board"
|
|
||||||
". file"
|
|
||||||
". player-info"
|
|
||||||
". player-side-board";
|
|
||||||
grid-template-rows: repeat(2, auto) 1fr repeat(3, auto);
|
|
||||||
gap: 0.25rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.board {
|
|
||||||
min-height: 95vmin;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.side-board {
|
.side-board {
|
||||||
min-height: 2rem;
|
grid-row: unset;
|
||||||
}
|
grid-column: span 10;
|
||||||
|
flex-direction: row;
|
||||||
.player-info {
|
|
||||||
text-align: center;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,38 +0,0 @@
|
|||||||
@using Shogi.Contracts.Types
|
|
||||||
<div style="margin: 0" class="PrimaryTheme">
|
|
||||||
|
|
||||||
@if (IsTurn)
|
|
||||||
{
|
|
||||||
<span class="turn-marker" title="Shows which player is next to move a piece.">Turn</span>
|
|
||||||
<span> </span>
|
|
||||||
}
|
|
||||||
|
|
||||||
@if (InCheck)
|
|
||||||
{
|
|
||||||
<span class="check-marker" title="King is in danger!">Check</span>
|
|
||||||
<span> </span>
|
|
||||||
}
|
|
||||||
|
|
||||||
@if (IsVictor)
|
|
||||||
{
|
|
||||||
<span class="victory-marker" title="Victory!">Victor</span>
|
|
||||||
<span> </span>
|
|
||||||
}
|
|
||||||
|
|
||||||
@if (string.IsNullOrEmpty(Name))
|
|
||||||
{
|
|
||||||
<p>Empty Seat</p>
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
<p>@Name</p>
|
|
||||||
}
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
@code {
|
|
||||||
[Parameter][EditorRequired] public bool IsTurn { get; set; }
|
|
||||||
[Parameter][EditorRequired] public bool InCheck { get; set; }
|
|
||||||
[Parameter][EditorRequired] public bool IsVictor { get; set; }
|
|
||||||
[Parameter][EditorRequired] public string Name { get; set; } = string.Empty;
|
|
||||||
}
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
.turn-marker {
|
|
||||||
display: inline-block;
|
|
||||||
padding: 2px 5px;
|
|
||||||
background-color: var(--foregroundColor);
|
|
||||||
background-color: var(--middlegroundColor);
|
|
||||||
color: var(--backgroundColor);
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: 80%;
|
|
||||||
border-radius: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.check-marker {
|
|
||||||
display: inline-block;
|
|
||||||
padding: 3px 8px;
|
|
||||||
background-color: darkred;
|
|
||||||
color: beige;
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: 80%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.victory-marker {
|
|
||||||
display: inline-block;
|
|
||||||
padding: 3px 8px;
|
|
||||||
background-color: darkgreen;
|
|
||||||
color: beige;
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: 80%;
|
|
||||||
}
|
|
||||||
@@ -1,15 +1,4 @@
|
|||||||
@using Shogi.Contracts.Types
|
<p style="margin: 0">
|
||||||
<div style="margin: 0" class="PrimaryTheme PlayerName">
|
|
||||||
|
|
||||||
@if (string.IsNullOrEmpty(Name))
|
|
||||||
{
|
|
||||||
<p>Empty Seat</p>
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
<p>@Name</p>
|
|
||||||
}
|
|
||||||
|
|
||||||
@if (IsTurn)
|
@if (IsTurn)
|
||||||
{
|
{
|
||||||
<span class="turn-marker" title="Shows which player is next to move a piece.">Turn</span>
|
<span class="turn-marker" title="Shows which player is next to move a piece.">Turn</span>
|
||||||
@@ -27,7 +16,17 @@
|
|||||||
<span class="victory-marker" title="Victory!">Victor</span>
|
<span class="victory-marker" title="Victory!">Victor</span>
|
||||||
<span> </span>
|
<span> </span>
|
||||||
}
|
}
|
||||||
</div>
|
|
||||||
|
@if (string.IsNullOrEmpty(Name))
|
||||||
|
{
|
||||||
|
<span>Empty Seat</span>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<span>@Name</span>
|
||||||
|
}
|
||||||
|
|
||||||
|
</p>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
[Parameter][EditorRequired] public bool IsTurn { get; set; }
|
[Parameter][EditorRequired] public bool IsTurn { get; set; }
|
||||||
|
|||||||
@@ -1,30 +1,26 @@
|
|||||||
.turn-marker {
|
.turn-marker {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
padding: 2px 5px;
|
padding: 3px 8px;
|
||||||
background-color: var(--foregroundColor);
|
background-color: #444;
|
||||||
background-color: var(--middlegroundColor);
|
color: beige;
|
||||||
color: var(--backgroundColor);
|
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
font-size: 80%;
|
font-size: 80%;
|
||||||
border-radius: 8px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.check-marker {
|
.check-marker {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
padding: 2px 5px;
|
padding: 3px 8px;
|
||||||
background-color: #f3a1a1;
|
background-color: darkred;
|
||||||
color: darkred;
|
color: beige;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
font-size: 80%;
|
font-size: 80%;
|
||||||
border-radius: 8px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.victory-marker {
|
.victory-marker {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
padding: 2px 5px;
|
padding: 3px 8px;
|
||||||
background-color: darkgreen;
|
background-color: darkgreen;
|
||||||
color: white;
|
color: beige;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
font-size: 80%;
|
font-size: 80%;
|
||||||
border-radius: 8px;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -136,17 +136,17 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnClickHand(Piece piece)
|
void OnClickHand(WhichPiece piece)
|
||||||
{
|
{
|
||||||
if (showPromotePrompt) return;
|
if (showPromotePrompt) return;
|
||||||
|
|
||||||
// Prevent selecting from both the hand and the board.
|
// Prevent selecting from both the hand and the board.
|
||||||
selectedBoardPosition = null;
|
selectedBoardPosition = null;
|
||||||
|
|
||||||
selectedPieceFromHand = piece.WhichPiece == selectedPieceFromHand
|
selectedPieceFromHand = piece== selectedPieceFromHand
|
||||||
// Deselecting the already-selected piece
|
// Deselecting the already-selected piece
|
||||||
? selectedPieceFromHand = null
|
? selectedPieceFromHand = null
|
||||||
: selectedPieceFromHand = piece.WhichPiece;
|
: selectedPieceFromHand = piece;
|
||||||
|
|
||||||
StateHasChanged();
|
StateHasChanged();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,48 +1,53 @@
|
|||||||
@using Shogi.Contracts.Types
|
@using Shogi.Contracts.Types
|
||||||
|
|
||||||
<div class="game-piece" title="@HtmlTitle">
|
<div class="game-piece" title="@HtmlTitle" data-upsidedown="@RenderUpsideDown">
|
||||||
@switch (Piece)
|
@switch (Piece)
|
||||||
{
|
{
|
||||||
|
|
||||||
case WhichPiece.Bishop:
|
case WhichPiece.Bishop:
|
||||||
<Bishop IsPromoted="@IsPromoted" />
|
<Bishop IsPromoted="@IsPromoted" />
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WhichPiece.GoldGeneral:
|
case WhichPiece.GoldGeneral:
|
||||||
<GoldGeneral />
|
<GoldGeneral />
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WhichPiece.King:
|
case WhichPiece.King:
|
||||||
<ChallengingKing />
|
<ChallengingKing />
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WhichPiece.Knight:
|
case WhichPiece.Knight:
|
||||||
<Knight IsPromoted="@IsPromoted" />
|
<Knight IsPromoted="@IsPromoted" />
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WhichPiece.Lance:
|
case WhichPiece.Lance:
|
||||||
<Lance IsPromoted="@IsPromoted" />
|
<Lance IsPromoted="@IsPromoted" />
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WhichPiece.Pawn:
|
case WhichPiece.Pawn:
|
||||||
<Pawn IsPromoted="@IsPromoted" />
|
<Pawn IsPromoted="@IsPromoted" />
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WhichPiece.Rook:
|
case WhichPiece.Rook:
|
||||||
<Rook IsPromoted="@IsPromoted" />
|
<Rook IsPromoted="@IsPromoted" />
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WhichPiece.SilverGeneral:
|
case WhichPiece.SilverGeneral:
|
||||||
<SilverGeneral IsPromoted="@IsPromoted" />
|
<SilverGeneral IsPromoted="@IsPromoted" />
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@*render nothing*@
|
@*render nothing*@
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@if (Count > 0)
|
|
||||||
{
|
|
||||||
<span class="counter">@Count</span>
|
|
||||||
}
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
[Parameter] public WhichPiece? Piece { get; set; }
|
[Parameter][EditorRequired] public WhichPiece? Piece { get; set; }
|
||||||
[Parameter] public bool IsPromoted { get; set; }
|
[Parameter] public bool IsPromoted { get; set; } = false;
|
||||||
[Parameter] public int Count { get; set; }
|
[Parameter] public bool RenderUpsideDown { get; set; }
|
||||||
|
|
||||||
private string HtmlTitle => Piece switch
|
private string HtmlTitle => this.Piece switch
|
||||||
{
|
{
|
||||||
WhichPiece.Bishop => "Bishop",
|
WhichPiece.Bishop => "Bishop",
|
||||||
WhichPiece.GoldGeneral => "Gold General",
|
WhichPiece.GoldGeneral => "Gold General",
|
||||||
|
|||||||
@@ -1,25 +1,12 @@
|
|||||||
::deep svg {
|
::deep svg {
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
height: auto;
|
max-height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-upsidedown] {
|
||||||
|
transform: rotateZ(180deg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.game-piece {
|
.game-piece {
|
||||||
overflow: hidden; /* Because SVGs have weird sizes. */
|
overflow: hidden; /* Because SVGs have weird sizes. */
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
.game-piece .counter {
|
|
||||||
display: grid;
|
|
||||||
place-content: center;
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
padding: 2px;
|
|
||||||
z-index: 100;
|
|
||||||
background-color: white;
|
|
||||||
border-radius: 9px;
|
|
||||||
border: 1px solid #444;
|
|
||||||
aspect-ratio: 1 / 1;
|
|
||||||
width: 15px;
|
|
||||||
height: 15px;
|
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
@if (IsPromoted)
|
@if (IsPromoted)
|
||||||
{
|
{
|
||||||
<svg viewBox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="ryuuma.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
|
<svg viewbox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="ryuuma.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
|
||||||
<metadata id="metadata15"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>龍馬</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>ryuuma</rdf:li><rdf:li>ryuume</rdf:li><rdf:li>ryuma</rdf:li><rdf:li>ryume</rdf:li><rdf:li>龍馬</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
|
<metadata id="metadata15"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>龍馬</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>ryuuma</rdf:li><rdf:li>ryuume</rdf:li><rdf:li>ryuma</rdf:li><rdf:li>ryume</rdf:li><rdf:li>龍馬</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
|
||||||
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="35" inkscape:window-y="763" inkscape:current-layer="svg2166" />
|
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="35" inkscape:window-y="763" inkscape:current-layer="svg2166" />
|
||||||
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /></defs>
|
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /></defs>
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<svg viewBox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="kakugyou.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
|
<svg viewbox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="kakugyou.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
|
||||||
<metadata id="metadata15"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>角行</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>kakugyou</rdf:li><rdf:li>kakugyo</rdf:li><rdf:li>角行</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
|
<metadata id="metadata15"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>角行</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>kakugyou</rdf:li><rdf:li>kakugyo</rdf:li><rdf:li>角行</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
|
||||||
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="25" inkscape:window-y="368" inkscape:current-layer="svg2166" />
|
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="25" inkscape:window-y="368" inkscape:current-layer="svg2166" />
|
||||||
<defs id="defs2168"> <linearGradient id="linearGradient10936"> <stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /> <stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /> </linearGradient> <linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /> </defs>
|
<defs id="defs2168"> <linearGradient id="linearGradient10936"> <stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /> <stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /> </linearGradient> <linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /> </defs>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<svg viewBox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="gyokushou.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
|
<svg viewbox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="gyokushou.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
|
||||||
<metadata id="metadata15"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>玉將</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>gyokushou</rdf:li><rdf:li>gyokusho</rdf:li><rdf:li>玉将</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
|
<metadata id="metadata15"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>玉將</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>gyokushou</rdf:li><rdf:li>gyokusho</rdf:li><rdf:li>玉将</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
|
||||||
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="121" inkscape:window-y="181" inkscape:current-layer="svg2166" />
|
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="121" inkscape:window-y="181" inkscape:current-layer="svg2166" />
|
||||||
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /></defs>
|
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /></defs>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
@@ -1,4 +1,4 @@
|
|||||||
<svg viewBox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="kinshou.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
|
<svg viewbox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="kinshou.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
|
||||||
<metadata id="metadata16"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>金將</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>kinshou</rdf:li><rdf:li>kinsho</rdf:li><rdf:li>金将</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
|
<metadata id="metadata16"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>金將</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>kinshou</rdf:li><rdf:li>kinsho</rdf:li><rdf:li>金将</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
|
||||||
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="10" inkscape:window-y="641" inkscape:current-layer="svg2166" />
|
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="10" inkscape:window-y="641" inkscape:current-layer="svg2166" />
|
||||||
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient2173" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.9299803,0,0,0.9377921,6.7492264,12.988526)" /></defs>
|
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient2173" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.9299803,0,0,0.9377921,6.7492264,12.988526)" /></defs>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
@@ -1,6 +1,6 @@
|
|||||||
@if (IsPromoted)
|
@if (IsPromoted)
|
||||||
{
|
{
|
||||||
<svg viewBox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="narikei.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
|
<svg viewbox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="narikei.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
|
||||||
<metadata id="metadata14"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>成桂</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>narikei</rdf:li><rdf:li>成桂</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
|
<metadata id="metadata14"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>成桂</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>narikei</rdf:li><rdf:li>成桂</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
|
||||||
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="6" inkscape:window-y="772" inkscape:current-layer="svg2166" />
|
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="6" inkscape:window-y="772" inkscape:current-layer="svg2166" />
|
||||||
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,-6.1065495e-2)" /></defs>
|
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,-6.1065495e-2)" /></defs>
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<svg viewBox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="keima.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
|
<svg viewbox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="keima.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
|
||||||
<metadata id="metadata15"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>桂馬</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>keima</rdf:li><rdf:li>桂馬</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
|
<metadata id="metadata15"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>桂馬</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>keima</rdf:li><rdf:li>桂馬</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
|
||||||
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="8" inkscape:window-y="757" inkscape:current-layer="svg2166" />
|
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="8" inkscape:window-y="757" inkscape:current-layer="svg2166" />
|
||||||
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,-6.1065495e-2)" /></defs>
|
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,-6.1065495e-2)" /></defs>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
@if (IsPromoted)
|
@if (IsPromoted)
|
||||||
{
|
{
|
||||||
<svg viewBox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="narikyou.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
|
<svg viewbox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="narikyou.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
|
||||||
<metadata id="metadata14"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>成香</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>narikyou</rdf:li><rdf:li>narikyo</rdf:li><rdf:li>成香</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
|
<metadata id="metadata14"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>成香</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>narikyou</rdf:li><rdf:li>narikyo</rdf:li><rdf:li>成香</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
|
||||||
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="32" inkscape:window-y="819" inkscape:current-layer="svg2166" />
|
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="32" inkscape:window-y="819" inkscape:current-layer="svg2166" />
|
||||||
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /></defs>
|
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /></defs>
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<svg viewBox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="kyousha.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
|
<svg viewbox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="kyousha.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
|
||||||
<metadata id="metadata15"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>香車</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>kyousha</rdf:li><rdf:li>kyosha</rdf:li><rdf:li>香車</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
|
<metadata id="metadata15"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>香車</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>kyousha</rdf:li><rdf:li>kyosha</rdf:li><rdf:li>香車</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
|
||||||
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="23" inkscape:window-y="738" inkscape:current-layer="svg2166" />
|
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="23" inkscape:window-y="738" inkscape:current-layer="svg2166" />
|
||||||
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /></defs>
|
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /></defs>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
@if (IsPromoted)
|
@if (IsPromoted)
|
||||||
{
|
{
|
||||||
<svg viewBox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="tokin.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
|
<svg viewbox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="tokin.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
|
||||||
<metadata id="metadata14"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>と金</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>tokin</rdf:li><rdf:li>と金</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
|
<metadata id="metadata14"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>と金</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>tokin</rdf:li><rdf:li>と金</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
|
||||||
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="16" inkscape:window-y="776" inkscape:current-layer="svg2166" />
|
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="16" inkscape:window-y="776" inkscape:current-layer="svg2166" />
|
||||||
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /></defs>
|
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /></defs>
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<svg viewBox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="fuhyou.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
|
<svg viewbox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="fuhyou.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
|
||||||
<metadata id="metadata15"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>歩兵</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>jp</dc:language><dc:subject><rdf:Bag><rdf:li>fuhyou</rdf:li><rdf:li>fuhyo</rdf:li><rdf:li>歩兵</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
|
<metadata id="metadata15"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>歩兵</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>jp</dc:language><dc:subject><rdf:Bag><rdf:li>fuhyou</rdf:li><rdf:li>fuhyo</rdf:li><rdf:li>歩兵</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
|
||||||
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="46" inkscape:window-y="46" inkscape:current-layer="svg2166" />
|
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="46" inkscape:window-y="46" inkscape:current-layer="svg2166" />
|
||||||
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /></defs>
|
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /></defs>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<svg viewBox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="oushou.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
|
<svg viewbox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="oushou.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
|
||||||
<metadata id="metadata15"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>王將</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>oushou</rdf:li><rdf:li>osho</rdf:li><rdf:li>王将</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
|
<metadata id="metadata15"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>王將</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>oushou</rdf:li><rdf:li>osho</rdf:li><rdf:li>王将</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
|
||||||
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="38" inkscape:window-y="748" inkscape:current-layer="svg2166" />
|
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="38" inkscape:window-y="748" inkscape:current-layer="svg2166" />
|
||||||
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /></defs>
|
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /></defs>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
@@ -1,6 +1,6 @@
|
|||||||
@if (IsPromoted)
|
@if (IsPromoted)
|
||||||
{
|
{
|
||||||
<svg viewBox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="ryuuou.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
|
<svg viewbox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="ryuuou.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
|
||||||
<metadata id="metadata15"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>龍王</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>ryuuou</rdf:li><rdf:li>ryuo</rdf:li><rdf:li>龍王</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
|
<metadata id="metadata15"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>龍王</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>ryuuou</rdf:li><rdf:li>ryuo</rdf:li><rdf:li>龍王</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
|
||||||
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="11" inkscape:window-y="743" inkscape:current-layer="svg2166" />
|
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="11" inkscape:window-y="743" inkscape:current-layer="svg2166" />
|
||||||
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /></defs>
|
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /></defs>
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<svg viewBox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="hisha.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
|
<svg viewbox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="hisha.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
|
||||||
<metadata id="metadata16"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>飛車</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>hisha</rdf:li><rdf:li>飛車</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
|
<metadata id="metadata16"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>飛車</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>hisha</rdf:li><rdf:li>飛車</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
|
||||||
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="15" inkscape:window-y="407" inkscape:current-layer="svg2166" />
|
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="15" inkscape:window-y="407" inkscape:current-layer="svg2166" />
|
||||||
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient2173" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.96514,0,0,0.9687658,4.9614803,8.8564779)" /></defs>
|
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient2173" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.96514,0,0,0.9687658,4.9614803,8.8564779)" /></defs>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
@if (IsPromoted)
|
@if (IsPromoted)
|
||||||
{
|
{
|
||||||
<svg viewBox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="narigin.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
|
<svg viewbox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="narigin.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
|
||||||
<metadata id="metadata14"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>成銀</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>narigin</rdf:li><rdf:li>成銀</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
|
<metadata id="metadata14"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>成銀</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>narigin</rdf:li><rdf:li>成銀</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
|
||||||
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="1" inkscape:window-y="745" inkscape:current-layer="svg2166" />
|
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="1" inkscape:window-y="745" inkscape:current-layer="svg2166" />
|
||||||
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /></defs>
|
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /></defs>
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<svg viewBox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="ginshou.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
|
<svg viewbox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="ginshou.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
|
||||||
<metadata id="metadata15"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /><dc:title>銀将</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>ginshou</rdf:li><rdf:li>ginsho</rdf:li><rdf:li>銀将</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
|
<metadata id="metadata15"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /><dc:title>銀将</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>ginshou</rdf:li><rdf:li>ginsho</rdf:li><rdf:li>銀将</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
|
||||||
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="2" inkscape:window-y="400" inkscape:current-layer="svg2166" />
|
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="2" inkscape:window-y="400" inkscape:current-layer="svg2166" />
|
||||||
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /></defs>
|
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /></defs>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
<main class="PrimaryTheme" style="padding: 1rem;">
|
<main class="PrimaryTheme">
|
||||||
<GameBoard SessionId="@SessionId" />
|
<GameBoard SessionId="@SessionId" />
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
|
|||||||
using Microsoft.AspNetCore.ResponseCompression;
|
using Microsoft.AspNetCore.ResponseCompression;
|
||||||
using Shogi.UI;
|
using Shogi.UI;
|
||||||
using Shogi.UI.Identity;
|
using Shogi.UI.Identity;
|
||||||
|
using Shogi.UI.Pages.Play;
|
||||||
using Shogi.UI.Shared;
|
using Shogi.UI.Shared;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
|
|
||||||
@@ -26,7 +27,7 @@ static void ConfigureDependencies(IServiceCollection services, IConfiguration co
|
|||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Why two HTTP clients?
|
* Why two HTTP clients?
|
||||||
* See https://docs.microsoft.com/en-us/aspnet/core/blazor/security/webassembly/additional-scenarios?source=recommendations&view=aspnetcore-6.0#unauthenticated-or-unauthorized-web-api-requests-in-an-app-with-a-secure-default-client
|
* See qhttps://docs.microsoft.com/en-us/aspnet/core/blazor/security/webassembly/additional-scenarios?source=recommendations&view=aspnetcore-6.0#unauthenticated-or-unauthorized-web-api-requests-in-an-app-with-a-secure-default-client
|
||||||
*/
|
*/
|
||||||
var baseUrl = configuration["ShogiApiUrl"];
|
var baseUrl = configuration["ShogiApiUrl"];
|
||||||
if (string.IsNullOrWhiteSpace(baseUrl))
|
if (string.IsNullOrWhiteSpace(baseUrl))
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
div {
|
div {
|
||||||
display: grid;
|
display: grid;
|
||||||
place-content: stretch;
|
place-content: stretch;
|
||||||
min-height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,6 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Remove="Pages\Home\VisualAids\PromotedPieceVisualAid.razor.css" />
|
<None Remove="Pages\Home\VisualAids\PromotedPieceVisualAid.razor.css" />
|
||||||
<None Remove="Pages\Play\GameBoard\OpponentName.razor.css" />
|
|
||||||
<None Remove="Pages\Play\GameBoard\PlayerName.razor.css" />
|
<None Remove="Pages\Play\GameBoard\PlayerName.razor.css" />
|
||||||
<None Remove="Pages\Play\GameBrowserEntry.razor.css" />
|
<None Remove="Pages\Play\GameBrowserEntry.razor.css" />
|
||||||
<None Remove="Pages\SearchPage.razor.css" />
|
<None Remove="Pages\SearchPage.razor.css" />
|
||||||
@@ -23,7 +22,6 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Content Include="Pages\Home\VisualAids\PromotedPieceVisualAid.razor.css" />
|
<Content Include="Pages\Home\VisualAids\PromotedPieceVisualAid.razor.css" />
|
||||||
<Content Include="Pages\Play\GameBoard\OpponentName.razor.css" />
|
|
||||||
<Content Include="Pages\Play\GameBoard\PlayerName.razor.css" />
|
<Content Include="Pages\Play\GameBoard\PlayerName.razor.css" />
|
||||||
<Content Include="Pages\Play\GameBrowserEntry.razor.css" />
|
<Content Include="Pages\Play\GameBrowserEntry.razor.css" />
|
||||||
<Content Include="Pages\SearchPage.razor.css" />
|
<Content Include="Pages\SearchPage.razor.css" />
|
||||||
@@ -37,6 +35,7 @@
|
|||||||
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="8.0.10" />
|
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="8.0.10" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client.Core" Version="8.0.10" />
|
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client.Core" Version="8.0.10" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="8.0.10" />
|
<PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="8.0.10" />
|
||||||
|
<PackageReference Include="Microsoft.Authentication.WebAssembly.Msal" Version="8.0.10" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Http" Version="8.0.1" />
|
<PackageReference Include="Microsoft.Extensions.Http" Version="8.0.1" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Logging.Configuration" Version="8.0.1" />
|
<PackageReference Include="Microsoft.Extensions.Logging.Configuration" Version="8.0.1" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
html, body, #app {
|
html, body, #app {
|
||||||
min-height: 100vh;
|
height: 100vh;
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
#app {
|
#app {
|
||||||
|
|||||||
@@ -44,7 +44,6 @@
|
|||||||
color: var(--hrefColor);
|
color: var(--hrefColor);
|
||||||
padding: 0;
|
padding: 0;
|
||||||
font-size: 100%;
|
font-size: 100%;
|
||||||
box-shadow: none;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.PrimaryTheme button.href:hover {
|
.PrimaryTheme button.href:hover {
|
||||||
@@ -56,17 +55,13 @@
|
|||||||
margin-bottom: var(--uniformBottomMargin);
|
margin-bottom: var(--uniformBottomMargin);
|
||||||
}
|
}
|
||||||
|
|
||||||
.PrimaryTheme p:last-child {
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.PrimaryTheme ul {
|
.PrimaryTheme ul {
|
||||||
padding: 0.3rem;
|
padding: 0.3rem;
|
||||||
margin: 0 !important;
|
margin: 0;
|
||||||
margin-bottom: var(--uniformBottomMargin);
|
margin-bottom: var(--uniformBottomMargin);
|
||||||
background-color: var(--backgroundColor);
|
background-color: var(--foregroundColor);
|
||||||
color: var(--foregroundColor);
|
color: var(--backgroundColor);
|
||||||
list-style: inside square;
|
list-style-position: inside;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
||||||
<title>Shogi.UI</title>
|
<title>Shogi.UI</title>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
const base = document.createElement('base');
|
var base = document.createElement('base');
|
||||||
base.href = window.location.href.includes("localhost")
|
base.href = window.location.href.includes("localhost")
|
||||||
? "/"
|
? "/"
|
||||||
: "/shogi/";
|
: "/shogi/";
|
||||||
|
|||||||
@@ -30,8 +30,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Shogi.Api", "Shogi.Api\Shog
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "E2ETests", "Tests\E2ETests\E2ETests.csproj", "{401120C3-45D6-4A23-8D87-C2BED29F4950}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "E2ETests", "Tests\E2ETests\E2ETests.csproj", "{401120C3-45D6-4A23-8D87-C2BED29F4950}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BoardRules", "BoardRules\BoardRules.csproj", "{5B2F47A0-6AD5-4DA9-9CFE-9F52F634DD5E}"
|
|
||||||
EndProject
|
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
@@ -69,10 +67,6 @@ Global
|
|||||||
{401120C3-45D6-4A23-8D87-C2BED29F4950}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{401120C3-45D6-4A23-8D87-C2BED29F4950}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{401120C3-45D6-4A23-8D87-C2BED29F4950}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{401120C3-45D6-4A23-8D87-C2BED29F4950}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{401120C3-45D6-4A23-8D87-C2BED29F4950}.Release|Any CPU.Build.0 = Release|Any CPU
|
{401120C3-45D6-4A23-8D87-C2BED29F4950}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{5B2F47A0-6AD5-4DA9-9CFE-9F52F634DD5E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{5B2F47A0-6AD5-4DA9-9CFE-9F52F634DD5E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{5B2F47A0-6AD5-4DA9-9CFE-9F52F634DD5E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{5B2F47A0-6AD5-4DA9-9CFE-9F52F634DD5E}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
using Shogi.Domain.YetToBeAssimilatedIntoDDD;
|
using System.Numerics;
|
||||||
using System.Numerics;
|
using Shogi.Domain.YetToBeAssimilatedIntoDDD;
|
||||||
|
|
||||||
namespace UnitTests;
|
|
||||||
|
|
||||||
|
namespace UnitTests
|
||||||
|
{
|
||||||
public class NotationShould
|
public class NotationShould
|
||||||
{
|
{
|
||||||
[Fact]
|
[Fact]
|
||||||
@@ -23,3 +23,4 @@ public class NotationShould
|
|||||||
Notation.ToBoardNotation(new Vector2(2, 2)).Should().Be("C3");
|
Notation.ToBoardNotation(new Vector2(2, 2)).Should().Be("C3");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
using Shogi.Domain.ValueObjects;
|
using Shogi.Domain.ValueObjects;
|
||||||
using Shogi.Domain.ValueObjects.Movement;
|
using Shogi.Domain.YetToBeAssimilatedIntoDDD.Pathing;
|
||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
|
|
||||||
namespace UnitTests;
|
namespace UnitTests;
|
||||||
|
|||||||
@@ -1,14 +1,11 @@
|
|||||||
using Shogi.Domain.ValueObjects;
|
using Shogi.Domain.ValueObjects;
|
||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace UnitTests;
|
namespace UnitTests
|
||||||
|
|
||||||
public class ShogiShould
|
|
||||||
{
|
{
|
||||||
private readonly ITestOutputHelper console;
|
public class ShogiShould(ITestOutputHelper console)
|
||||||
public ShogiShould(ITestOutputHelper console)
|
|
||||||
{
|
{
|
||||||
this.console = console;
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MoveAPieceToAnEmptyPosition()
|
public void MoveAPieceToAnEmptyPosition()
|
||||||
@@ -455,3 +452,4 @@ public class ShogiShould
|
|||||||
|
|
||||||
private static ShogiBoard MockShogiBoard() => new(BoardState.StandardStarting);
|
private static ShogiBoard MockShogiBoard() => new(BoardState.StandardStarting);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user