From bdfd54a6fa6a2242e8d8851b3c366acd885bd5e1 Mon Sep 17 00:00:00 2001 From: Thibaud Date: Wed, 25 Sep 2024 17:11:18 +0200 Subject: [PATCH] update readme with screenshot --- README.md | 6 +++++- screenshot.png | Bin 0 -> 16484 bytes 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 screenshot.png diff --git a/README.md b/README.md index 2d02051..eb191dc 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,8 @@ -# Test websockets +# Tic tac toe websockets + +Two players tic-tac-joe implemented with an HTML canvas and websockets + +![](screenshot.png) ## How to run diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..42d9123e603d24d886e6ae3c6e9d9f4df1a0d519 GIT binary patch literal 16484 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