From 332b709408c2b7d7b63d28d164b5d874beb8291a Mon Sep 17 00:00:00 2001 From: Saurabh Maurya Date: Thu, 16 Sep 2021 08:20:18 +0530 Subject: [PATCH] Initial commit --- .github/PULL_REQUEST_TEMPLATE.md | 32 -- .github/labeler.yml | 8 - .github/workflows/labeler.yml | 11 - Android.md | 64 --- Flutter.md | 82 --- README.md | 66 --- WebDev.md | 63 --- img1.jpeg | Bin 0 -> 58653 bytes index.html | 62 +++ script.js | 891 +++++++++++++++++++++++++++++++ style.css | 204 +++++++ 11 files changed, 1157 insertions(+), 326 deletions(-) delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/labeler.yml delete mode 100644 .github/workflows/labeler.yml delete mode 100644 Android.md delete mode 100644 Flutter.md delete mode 100644 README.md delete mode 100644 WebDev.md create mode 100644 img1.jpeg create mode 100644 index.html create mode 100644 script.js create mode 100644 style.css diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 2bb8e0c..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,32 +0,0 @@ -## CSOC Task 1 Submission - - -### Track - -- [ ] Android -- [ ] Flutter -- [ ] Web Devlopment - -### Task Completed - -#### Tic Tac Toe - -- [ ] **Task 1**: Implement a two-player mode that allows two people to compete against each other. -- [ ] **Task 2**: Add a single-player mode that allows users to play with an intelligent bot that never loses. -- [ ] **Task 3**: Add an option to select which shape to begin with (X/O). -- [ ] **Task 4:** In single-player mode, add an option to choose who will start first - computer or player. -- [ ] **Extras:** You may keep a record of scores and use player names for interactivity. - -#### Sudoku - -- [ ] **Task 1**: Implement a Sudoku game. (The board may remain the same every time). -- [ ] **Task 2**: Implement a board generator and generate a random board in every game. You may use backtracking or naive approaches to generate the board. -- [ ] **Task 3:** Add a timer to the game, where the user may select a particular time to complete the game within it. **Bonus**: As the time reaches 0, the user can be warned about the time running out. -- [ ] **Task 4:** Warning the user about incorrect inputs and user engagement. -- [ ] **Extras:** To make the game more engaging, you may provide hints if the user is stuck for like 10-20 seconds. - -### Submission - - -[Repo](link) -[APK|Web Site](link) diff --git a/.github/labeler.yml b/.github/labeler.yml deleted file mode 100644 index 714b6e5..0000000 --- a/.github/labeler.yml +++ /dev/null @@ -1,8 +0,0 @@ -android: -- any: ['Android.md'] - -flutter: -- any: ['Flutter.md'] - -web: -- any: ['WebDev.md'] diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml deleted file mode 100644 index 331ddc9..0000000 --- a/.github/workflows/labeler.yml +++ /dev/null @@ -1,11 +0,0 @@ -name: "Pull Request Labeler" -on: -- pull_request_target - -jobs: - triage: - runs-on: ubuntu-latest - steps: - - uses: actions/labeler@v3 - with: - repo-token: "${{ secrets.GITHUB_TOKEN }}" diff --git a/Android.md b/Android.md deleted file mode 100644 index f2eb313..0000000 --- a/Android.md +++ /dev/null @@ -1,64 +0,0 @@ -# CSOC Week1 Android - -## Introduction -The aptest definition for android is - "Android is a mobile operating system based on a modified version of the Linux kernel and other open-source software, designed primarily for touchscreen mobile devices such as smartphones and tablets." -In short, we can say that it is an Operating system for touchscreen devices, and any device that runs on this Operating System is known as an Android Device. Now for every operating system, some applications can run on it to perform specific tasks. Similarly, for Android Devices, we have Android Apps that can run on them to perform specific tasks. - -Evident enough that the software engineering field for developing such apps is known as Android App Development. -The official language for Android development is Kotlin, but Java is still used in many famous courses and many projects, so you are free to use any of them. - -## Installation - -### Android Studio - -Android Studio is the official Integrated Development Environment (IDE) for Android app development. This software is a bit heavy on normal systems (8 GB Ram & 1 TB HDD) and can be quite laggy for any systems below this configuration. - -[](https://developer.android.com/studio/install) - -While developing an android app you will need to test it on a device. You can test it in two ways - - -- [Real Device (Preferred for slower systems)](https://developer.android.com/studio/debug/dev-options) -For testing you apps on a real device you will need to have a USB cable and an Android device. Follow this tutorial to enable USB debugging in order to run your app in the device. - -- [Emulator](https://developer.android.com/studio/run/emulator) -An Android Emulator simulates Android devices on your computer so that you can test your application on a variety of devices and Android API levels without needing to have each physical device. It provides almost all of the capabilities of a real Android device. - - -## How to get started - -If you haven't had any chance to develop android apps earlier then don't worry it's not too late to start now. Here are few resources to start with android development. - -- Video Tutorial - - [Android development tutorial 1](https://www.youtube.com/playlist?list=PLUcsbZa0qzu3Mri2tL1FzZy-5SX75UJfb) - - [Android development tutorial 2](https://www.youtube.com/playlist?list=PLgCYzUzKIBE8TUoCyjomGFqzTFcJ05OaC) -- Written Tutorials - - [Create a project](https://developer.android.com/training/basics/firstapp/creating-project) - - [Run your app](https://developer.android.com/training/basics/firstapp/running-app) - - [Include new UI](https://developer.android.com/training/basics/firstapp/building-ui) - - [Make it functional](https://developer.android.com/training/basics/firstapp/starting-activity) - -## Submission Guidelines : - -Submission has to be done by sharing your github repo link and the .apk file of your android app - -- Fork and then Clone your repository -- Make a new entry into submissions as explained in comments -- Commit and Push the changes -- Make a Pull request - -## Submissions - - - - - - -- Raina Jain - [TicTacToe](https://github.com/RainaJain5/TicTacToe) [APK](https://github.com/RainaJain5/TicTacToe/blob/master/TicTacToe.apk) -- Mihir Kumar Badkur - [Tic-Tac-Toe](https://github.com/mihir02badkur/Tic-Tac-Toe) [APK](https://github.com/mihir02badkur/Tic-Tac-Toe/blob/master/TIC-TAC-TOE.apk) -- Ayushi Gupta - [Tic_-.Tac_-.Toe04](https://github.com/ayushigupta931/Tic_-.Tac_-.Toe04) [APK](https://github.com/ayushigupta931/Tic_-.Tac_-.Toe04/blob/master/app-debug.apk) diff --git a/Flutter.md b/Flutter.md deleted file mode 100644 index 599d16b..0000000 --- a/Flutter.md +++ /dev/null @@ -1,82 +0,0 @@ -# CSoC Week-1 Flutter - -# Introduction - -Flutter - promises cross platform, natively compiled apps, with slick smooth UIs. Developed by Google, the framework is gaining in popularity, especially amongst new startups. - -## Single Codebase…like Java? - -Flutter’s major selling point is that it allows developers to create mobile apps for Android and iOS using a single codebase. It’s possible to build a Flutter app targeting Android and build the same project on a Mac for iOS devices without changing a single line of code. - -Unlike most other mobile app frameworks Flutter does not use WebView nor OEM widgets. Instead, Flutter uses its own rendering engine to draw widgets. - -Apps are natively compiled too, so you’ll need a machine with Android SDK installed for targetting Android and you’ll need to be running XCode to build for iOS devices. - -# Getting Started - -## Installation - -Here is how you can install Flutter. Do not install Android Studio right now, this week you do not require it. Read until writing your first flutter app. - -[Install](https://flutter.dev/docs/get-started/install) - -To use flutter consistently between different terminal sessions, go through this - -[Linux install](https://flutter.dev/docs/get-started/install/linux#update-your-path) - -Install a suitable IDE. VS Code (compared to Android Studio) is good choice for a light and better experience. - -# For Basic Understanding - -- [Flutter Widgets - Javatpoint](https://www.javatpoint.com/flutter-widgets) -- [Flutter - Container Cheat Sheet](https://medium.com/jlouage/container-de5b0d3ad184) -- [Flutter Tutorial for Beginners - Build iOS and Android Apps with Google's Flutter & Dart](https://youtu.be/GLSG_Wh_YWc) -- [The Flutter Series: Exploring a Flutter project and building your first Flutter app](https://medium.com/@dev.n/the-complete-flutter-series-article-1-exploring-a-flutter-project-and-building-your-first-flutter-e438ea941d70) - -- [The Flutter Series: Basic Widgets and Layout](https://medium.com/@dev.n/the-complete-flutter-series-article-2-basic-widgets-and-layout-in-flutter-92a4fbd4a3e1) - -Don't forget to switch on USB Debugging on your mobile. (In case you are not using an emulator) - -For reference, keep this handy - -[Flutter - Dart API docs](https://api.flutter.dev/) - -# Challenge - -As an aspiring developer, you'd need to keep building things to keep your knowledge on tips. Now that you are good to go with the basics of native Android Development, we want you to build **one of the games** from the following list on your own. - -1. Tic-Tac-Toe Game -2. Sudoku game - -You have to provide your Repo and APK File as part of submission - -### **Judging** - -The evaluation would be done mainly on the following basis: - -1. User Interface and User Experience -2. Authenticity and readability of the code -3. Completion of mentioned tasks -4. Bonus Points for implementing extra features depending on your creativity😉 - -Remember, the deadline for this week's task is **June 13th, 2021, 23:59**. - -## Submission Guidelines : - -Submission has to be done by sharing your github repo link and the .apk file of your application - -- Fork and then Clone your repository -- Make a new entry into submissions as explained in comments -- Commit and Push the changes -- Make a Pull request - -## Submissions - -- Parth Bansal - [tic_tac_toe](https://github.com/parthb83/tic_tac_toe) [APK](https://github.com/parthb83/tic_tac_toe/blob/master/app-release.apk) -- Parth Gupta - [Tic Tac](https://github.com/parthg48/tictactoe_flutter) [APK](https://github.com/king-11/Vue-Birthday/blob/master/public/favicon.ico) -- Drishti Bansal - [Tic-Tac-toe](https://github.com/stuck-in-a-conundrum/Tic-Tac-toe.git) [APK](https://github.com/stuck-in-a-conundrum/Tic-Tac-toe/blob/main/build/app/outputs/apk/debug/app-debug.apk) -- Pawan Kumar [Tic Tac](https://github.com/blackpearl13246/MY_GAME) [APK](build/app/outputs/flutter-apk/app-armeabi-v7a-release.apk) -- Dhroov Singh - [Tictactoe](https://github.com/singhdhroov/Tictactoe.git) [APK](https://github.com/singhdhroov/Tictactoe/blob/master/app-release.apk) -- Dhruv Agarwal - [CSOC-Week1-Tic-Tac-Toe-Flutter](https://github.com/dhruxy/CSOC-Week1-Tic-Tac-Toe-Flutter) [APK](https://github.com/dhruxy/CSOC-Week1-Tic-Tac-Toe-Flutter/blob/main/app-release.apk) -- Dev Raj R - [flutter-tic-tac-toe](https://github.com/dev-raj-1729/flutter-tic-tac-toe) [APK](https://github.com/dev-raj-1729/hello-world/blob/4fcb8a45ae3215ba385a6799e874d812ead23b53/app-release.apk) -- Chirayu Mittal - [tic-tac-toe_Chirayu](https://github.com/chirayumit001/tic-tac-toe_Chirayu) [Site](https://mine-tic-tac-toe-game.netlify.app/#/) diff --git a/README.md b/README.md deleted file mode 100644 index 5508813..0000000 --- a/README.md +++ /dev/null @@ -1,66 +0,0 @@ -# CSOC Week1 - -This week, we'll jump with the basics of development with three tracks - - -1. Android Development -2. Web Development -3. Cross Platform Development using Flutter - -Having knowledge of the previous week is necessary since Git remains highly used in this week. If you think you're weak in any of the topics, then try to revise them. - -There's a basic project in each track as well to finish by the end of this week (June 13), so get your tools back in shape! - -You may choose to compete in any number of tracks. -## Assignment - -This week tasks will be on the basic of UI and UX development. It will comprise of making simple games like TIC-TAC-TOE and SUDOKU . - -**Note** : You have to choose one of them. - -### [TIC-TAC-TOE](https://en.m.wikipedia.org/wiki/Tic-tac-toe) - -The task that we'll be working over is to build a TIC-TAC-TOE game , a multi-player classic game where both players will have to choose between X or O .The first player to complete a diagonal, vertical or a horizontal blocks wins the game. - -### Tasks - -- **Task 1**: Implement a two-player mode that allows two people to compete against each other. -- **Task 2**: Add a single-player mode that allows users to play with an intelligent bot that never loses. -- **Task 3**: Add an option to select which shape to begin with (X/O). -- **Task 4:** In single-player mode, add an option to choose who will start first - computer or player. -- **Extras:** You may keep a record of scores and use player names for interactivity. - - -### [SUDOKU](https://en.wikipedia.org/wiki/Sudoku) - -Sudoku is a logic-based puzzle game .The aim of the Sudoku puzzle is to put in a numerical digit from 1 through 9 in each -cell of a 9×9 grid made up of 3×3 sub-grids (called "block”), starting with various digits -given in some cells (the "givens") with the others empty; each row, column, and block -must contain only one instance of each numeral. - -Complexity of the algorithm that are used in building are divided into two parts. -- One is the complexity of the algorithm to generate the complete grid. We discover the randomness of generating complete grid increases when the complexity increases, that is, the randomness higher and the complexity greater. - -- Second, is the algorithm to assign numbers in grid and check for each row , column and block and declare the final result . - -### Tasks - -- **Task 1**: Implement a Sudoku game. (The board may remain the same every time). -- **Task 2**: Implement a board generator and generate a random board in every game. You may use backtracking or naive approaches to generate the board. -- **Task 3:** Add a timer to the game, where the user may select a particular time to complete the game within it. **Bonus**: As the time reaches 0, the user can be warned about the time running out. -- **Task 4:** Warning the user about incorrect inputs and user engagement. -- **Extras:** To make the game more engaging, you may provide hints if the user is stuck for like 10-20 seconds. - -## Judging - -The evaluation would be done mainly on the following basis: - -1. User Interface and User Experience -2. Authenticity and readability of the code -3. Completion of mentioned tasks -4. Bonus Points for implementing extra features depending on your creativity😉 - -## Tracks - -- [Web Development](/WebDev.md) -- [Android](/Android.md) -- [Flutter](/Flutter.md) diff --git a/WebDev.md b/WebDev.md deleted file mode 100644 index 90c6b6b..0000000 --- a/WebDev.md +++ /dev/null @@ -1,63 +0,0 @@ -# CSOC Week1 Web Development - -## Introduction - -Web development is a basic skill that is often said as a good start to the development field. This week you will learn the basics of web development. You will get familiar with HTML, CSS, and JavaScript. On completion, you will be able to make simple static websites for both desktop and mobile. - -## Responsive UI - -One major thing to ensure while working on Web Apps is to ensure that most people will open your websites on mobile first based on that we develop our site on Mobile First approach and then make changes to scale with increasing screen size - -### Native CSS Tools - -These are vanilla CSS Tools that will allow you to make your UI respond to changes in the screen size. - -- Flexbox -- Grid -- Float -- Media Queries - -### CSS Frameworks - -They provide you with a set of classes and components that scale with the screen size. Although its only recommended to use them when you understand native CSS properly. - -- Bootstrap 5 -- TailwindCSS 2 -- Bulma -- Materialize - -## Submission Guidelines : - -Submission has to be done by sharing your github repo link and deployment link of site - -- Fork and then Clone your repository -- Make a new entry into submissions as explained in comments -- Commit and Push the changes -- Make a Pull request - -## Submissions - - - -- Aniruddh Patil - [repo](https://github.com/lelouch-of-the-code/csoc-week1-wd) | [live site](https://anii-sudoku.netlify.app/) -- Yash Raj - [Sudoku-Game](https://github.com/tiger-yash/Sudoku-Game) [SUDOKU](https://tiger-yash.github.io/Sudoku-Game/) -- Naveen Kumar - [Tic-Tac-Toe](https://github.com/Majesty-12/Tic-Tac-Toe) [Website](https://naveen-tic-tac-toe.netlify.app) -- Sanskar Santosh Totla - [Sudoku-Game](https://github.com/it-is-skywalkerl/Sudoku-Game) [Site](https://it-is-skywalkerl.github.io/Sudoku-Game/) -- Manali Pawar - [Sudoku-Game] (https://github.com/ManaliPawar/Sudoku-Game) [Site](https://manalipawar.github.io/Sudoku-Game/) -- Pratik Mishra [Sudoku_CSoC_2021-web](https://github.com/DolceParadise/Sudoku_CSoC_2021-web) [Site](https://dolceparadise.github.io/Sudoku_CSoC_2021-web/) -- Ashwat Kumar Singh - [Tic Tac](https://github.com/NerdyLucifer/Tic-Tac-Toe) [Site](https://nerdylucifer.github.io/Tic-Tac-Toe/singlePlayerMode.html) -- Ankur Agrawal - [Repo Name](https://github.com/Ankur-Agrawal-ece20/Tic-Tac-Toe) [Site](https://ankur-agrawal-ece20.github.io/Tic-Tac-Toe/index.html) -- Danish Ahmed Mirza - [Tic Tac](https://github.com/try-catch-stack/Tic-Tac-Toe) [Site](https://try-catch-stack.github.io/Tic-Tac-Toe/) -- Tarun Arora - [CSOC-Week1-Tic-Tac-Toe](https://github.com/Tarun-Arora/CSOC-Week1-Tic-Tac-Toe) [Site](https://tarun-arora.github.io/CSOC-Week1-Tic-Tac-Toe/) -- Aditya Chhaparia - [sudoku-game](https://github.com/aditya-chhaparia/sudoku-game) [Site](https://aditya-chhaparia.github.io/sudoku-game/) -- Shubhangi Choudhary - [TicTacToe](https://github.com/shubhangi013/TicTacToe) [Site](https://shubhangi013.github.io/TicTacToe/) -- Sahil saini - [tic-tac-toe](https://github.com/sahilsaini110/tic-tac-toe) [sahilsaini-tic-tac-toe](https://sahilsaini-tic-tac-toe.netlify.app) -- Manu Shukla - [Tic Tac Toe](https://github.com/manu-shukla/Tic-Tac-Toe) [Site](https://manu-shukla.github.io/Tic-Tac-Toe/) -- Divyansh Srivastava [Tic-tac-toe](https://github.com/Divyansh013/Tic-Tac-Toe) [Site](https://divyansh013.github.io/Tic-Tac-Toe/) -- Ashlesha Dixit - [TicTacToe](https://github.com/sakshi-2412/TicTacToe) [Site](https://sakshi-2412.github.io/TicTacToe/) -- Harshita Singh - [TIC-TAC-TOE](https://github.com/hiya-09/TIC-TAC-TOE.git) [Site](https://github.com/hiya-09) -- Apoorve shukla - [Tic-Tac-Toe_game](https://github.com/shukapurv/Tic-Tac-Toe_game) [Site](https://shukapurv.github.io/Tic-Tac-Toe_game/) -- Deepak Verma - [github Repo](https://github.com/Deepakv14/TicTacToeFinal.github.io) [Web Site](https://deepakv14.github.io/TicTacToeFinal.github.io/) -- Debarati Bandopadhyay - [tic-tac-toe](https://github.com/debarati-06/tic-tac-toe) [Site](https://debarati-06.github.io/tic-tac-toe/) -- Ayush Tiwari - [tictactoe.github.io](https://github.com/Ayush-AT24/tictactoe.github.io)[site](https://ayush-at24.github.io/tictactoe.github.io/) -- Somesh Ranjan - [Tic-Tac-Toe](https://github.com/somesh202/Tic-Tac-Toe) [Site](https://somesh202.github.io/Tic-Tac-Toe/) diff --git a/img1.jpeg b/img1.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..e95092f6d36abcc89f46cb529689d8325c65e1eb GIT binary patch literal 58653 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

v>hd;Hr&4a?@<7r6Fwkgw5xb>y-uvWlCTMz$&Z~ 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 literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 0000000..b4f558b --- /dev/null +++ b/index.html @@ -0,0 +1,62 @@ + + + + + Tic Tac Toe Game + + + +

+
+
Tic Tac Toe
+
+
Play versus
+
+ + +
+
+ +
+
Select the shape to start with
+
+ + +
+
+ +
+
+ +
+
+ + + +
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+ + +
+ +
+ + + + + + \ No newline at end of file diff --git a/script.js b/script.js new file mode 100644 index 0000000..dd9b281 --- /dev/null +++ b/script.js @@ -0,0 +1,891 @@ +var players2 = document.getElementById('players2'); +var singleplayer = document.getElementById('singleplayer'); +var shape = document.getElementById('shape'); +var reset = document.getElementsByClassName('reset'); +var result = document.getElementById('result'); +var boards = document.getElementsByClassName('board'); +var selectbox = document.getElementById('select-box'); +var init_height = selectbox.style.height; +var start = document.getElementsByClassName('start'); +var arr = [players2, singleplayer, shape]; +var x_score = document.getElementById('x_score'); +var o_score = document.getElementById('o_score'); +var initialO = document.getElementsByClassName('O'); +var initialX = document.getElementsByClassName('X'); +var title = document.getElementsByClassName('title'); +var friend = document.getElementById('friend'); +var computer = document.getElementById('computer'); +var turn = document.getElementById('turn'); +var home = document.getElementsByClassName('home'); +var bgimage = document.getElementsByClassName('bg-image'); +var wasResult = false; +var buttons = document.getElementsByTagName('button'); +var player = "notyetassigned"; +var initialSign ="notyetassigned"; +var scoreX = 0; +var scoreO = 0; +var player1name = ""; +var player2name = ""; +var playername = ""; + +var gameResult = false; +friend.onclick = function(){playerInitial('friend')}; +computer.onclick = function(){playerInitial('computer')}; + +var checkFilling = [0,0,0,0,0,0,0,0,0]; +var signsOfBoxes = ['_','_','_','_','_','_','_','_','_']; + +const box1 = document.getElementById('topleft'); +const box2 = document.getElementById('top'); +const box3 = document.getElementById('topright'); +const box4 = document.getElementById('left'); +const box5 = document.getElementById('middle'); +const box6 = document.getElementById('right'); +const box7 = document.getElementById('bottomleft'); +const box8 = document.getElementById('bottom'); +const box9 = document.getElementById('bottomright'); + +function playerInitial(p){ + player = p; + let foo; + if(p == 'friend'){ + buttons[0].style.backgroundColor = "#00BBF0"; + buttons[1].style.backgroundColor = "#162447"; + title[1].innerHTML = "Select the shape to start with"; + buttons[2].innerHTML = "O"; + buttons[3].innerHTML = "X"; + do{ + foo = prompt('Enter player1\'s name'); + }while(foo != null && foo === ""); + player1name = foo; + do{ + foo = prompt('Enter player2\'s name'); + }while(foo != null && foo === ""); + player2name = foo; + } + else{ + buttons[1].style.backgroundColor = "#00BBF0"; + buttons[0].style.backgroundColor = "#162447"; + title[1].innerHTML = "Who will play first?"; + buttons[2].innerHTML = "Computer"; + buttons[3].innerHTML = "You"; + let foo; + do{ + foo = prompt('Enter your name'); + }while(foo != null && foo === ""); + playername= foo; + } +} + +initialO[0].onclick = function(){signfunction('O')}; +initialX[0].onclick = function(){signfunction('X')}; +function signfunction(p){ + initialSign = p; + if(p=='X'){ + buttons[2].style.backgroundColor = "#00BBF0"; + buttons[3].style.backgroundColor = "#162447"; + } + else{ + buttons[3].style.backgroundColor = "#00BBF0"; + buttons[2].style.backgroundColor = "#162447"; + } +} + +start[0].onclick = function() {hide()}; +function hide(){ + if(player == "notyetassigned" || initialSign == "notyetassigned"){ + if(player == "notyetassigned"){ + title[0].style.color = "red"; + } + else{ + title[0].style.color = "black"; + } + if(initialSign == "notyetassigned"){ + title[1].style.color = "red"; + } + else{ + title[1].style.color = "black"; + } + } + else{ + for(var i=0; i 10 || player2name.length > 10) + { + x_score.innerHTML = "X's score: " + scoreX; + o_score.innerHTML = "O's score: " + scoreO; + } + else{ + x_score.innerHTML = player1name + "'s score: " + scoreX; + o_score.innerHTML = player2name + "'s score: " + scoreO; + } + } + else{ + if(typeof(playername) == 'object' || playername.length > 10) + { + x_score.innerHTML = "Computer's score: " + scoreX; + o_score.innerHTML = "O's score: " + scoreO; + } + else{ + x_score.innerHTML = "Computer's score: " + scoreX; + o_score.innerHTML = playername + "'s score: " + scoreO; + } + } + bgimage[0].style.visibility = "hidden"; + bgimage[0].style.overflow = "hidden"; + if(player=='friend'){ + if(typeof(player1name) != 'object' && typeof(player2name) != 'object' && initialSign=='X') alert(player1name + " will play first"); + if(typeof(player1name) != 'object' && typeof(player2name) != 'object' && initialSign == 'O') alert(player2name + " will play first"); + turn.style.visibility = "visible"; + turn.innerHTML = initialSign +"'s turn"; + two_playersgame(); + } + else { + turn.style.visibility = "visible"; + turn.innerHTML = initialSign +"'s turn"; + one_playergame(); + } + + } + +} + + + +/*********************************************************************************** */ +function two_playersgame(){ + turn.innerHTML = initialSign + "'s turn"; + box1.onclick = function() {myfunction('topleft')}; + box2.onclick = function() {myfunction('top')}; + box3.onclick = function() {myfunction('topright')}; + box4.onclick = function() {myfunction('left')}; + box5.onclick = function() {myfunction('middle')}; + box6.onclick = function() {myfunction('right')}; + box7.onclick = function() {myfunction('bottomleft')}; + box8.onclick = function() {myfunction('bottom')}; + box9.onclick = function() {myfunction('bottomright')}; +} +function Xwon(){ + result.style.visibility = "visible"; + if(typeof(player1name) == 'object' || typeof(player2name) == 'object') + { + result.innerHTML = "X won"; + } + else{ + result.innerHTML = player1name + " won"; + } + for(var i=0; i<9; i++) checkFilling[i]=1; + if(!wasResult) scoreX+=1; + if(typeof(player1name) == 'object' || typeof(player2name) == 'object' || (player1name.length>10 || player2name.length>10)) + { + x_score.innerHTML = "X's score: " + scoreX; + } + else{ + x_score.innerHTML = player1name + "'s score: " + scoreX; + } + home[0].style.visibility = "visible"; + wasResult = true; + turn.style.visibility = "hidden"; +} +function Owon(){ + result.style.visibility = "visible"; + if(typeof(player1name) === 'object' || typeof(player2name) === 'object') + { + result.innerHTML = "O won"; + } + else{ + result.innerHTML = player2name + " won"; + } + for(var i=0; i<9; i++) checkFilling[i]=1; + if(!wasResult) scoreO+=1; + + if(typeof(player1name) === 'object' || typeof(player2name) === 'object' || (player1name.length>10 || player2name.length>10)) + { + o_score.innerHTML = "O's score: " + scoreO; + } + else{ + o_score.innerHTML = player2name + "'s score: " + scoreO; + } + home[0].style.visibility = "visible"; + wasResult = true; + turn.innerHTML = initialSign +"'s turn"; + turn.style.visibility = "hidden"; +} +function myfunction(x){ + if(x == "topleft"){ + if(checkFilling[0]==0) + { + document.getElementById(x).innerHTML = initialSign; + signsOfBoxes[0] = initialSign; + if (initialSign == 'X') initialSign = 'O'; else initialSign = 'X'; + checkFilling[0]=1; + } + turn.innerHTML = initialSign + "'s turn"; + } + else if(x == "top"){ + if(checkFilling[1]==0) + { + document.getElementById(x).innerHTML = initialSign; + signsOfBoxes[1] = initialSign; + if (initialSign == 'X') initialSign = 'O'; else initialSign = 'X'; + checkFilling[1]=1; + } + turn.innerHTML = initialSign + "'s turn"; + } + else if(x == "topright"){ + if(checkFilling[2]==0) + { + document.getElementById(x).innerHTML = initialSign; + signsOfBoxes[2] = initialSign; + if (initialSign == 'X') initialSign = 'O'; else initialSign = 'X'; + checkFilling[2]=1; + } + turn.innerHTML = initialSign + "'s turn"; + } + else if(x == "left"){ + if(checkFilling[3]==0) + { + document.getElementById(x).innerHTML = initialSign; + signsOfBoxes[3] = initialSign; + if (initialSign == 'X') initialSign = 'O'; else initialSign = 'X'; + checkFilling[3]=1; + } + turn.innerHTML = initialSign + "'s turn"; + } + else if(x == "middle"){ + if(checkFilling[4]==0) + { + document.getElementById(x).innerHTML = initialSign; + signsOfBoxes[4] = initialSign; + if (initialSign == 'X') initialSign = 'O'; else initialSign = 'X'; + checkFilling[4]=1; + } + turn.innerHTML = initialSign + "'s turn"; + } + else if(x == "right"){ + if(checkFilling[5]==0) + { + document.getElementById(x).innerHTML = initialSign; + signsOfBoxes[5] = initialSign; + if (initialSign == 'X') initialSign = 'O'; else initialSign = 'X'; + checkFilling[5]=1; + } + turn.innerHTML = initialSign + "'s turn"; + } + else if(x == "bottomleft"){ + if(checkFilling[6]==0) + { + document.getElementById(x).innerHTML = initialSign; + signsOfBoxes[6] = initialSign; + if (initialSign == 'X') initialSign = 'O'; else initialSign = 'X'; + checkFilling[6]=1; + } + turn.innerHTML = initialSign + "'s turn"; + } + else if(x == "bottom"){ + if(checkFilling[7]==0) + { + document.getElementById(x).innerHTML = initialSign; + signsOfBoxes[7] = initialSign; + if (initialSign == 'X') initialSign = 'O'; else initialSign = 'X'; + checkFilling[7]=1; + } + turn.innerHTML = initialSign + "'s turn"; + } + else if(x == "bottomright"){ + if(checkFilling[8]==0) + { + document.getElementById(x).innerHTML = initialSign; + signsOfBoxes[8] = initialSign; + if (initialSign == 'X') initialSign = 'O'; else initialSign = 'X'; + checkFilling[8]=1; + } + turn.innerHTML = initialSign + "'s turn"; + } + + if((signsOfBoxes[0] == 'X') && signsOfBoxes[0] == signsOfBoxes[3] && signsOfBoxes[3] == signsOfBoxes[6]){ + box1.style.backgroundColor = "#071E54"; + box4.style.backgroundColor = "#071E54"; + box7.style.backgroundColor = "#071E54"; + Xwon(); + } + else if((signsOfBoxes[0] == 'X') && signsOfBoxes[0] == signsOfBoxes[1] && signsOfBoxes[1] == signsOfBoxes[2]){ + box1.style.backgroundColor = "#071E54"; + box2.style.backgroundColor = "#071E54"; + box3.style.backgroundColor = "#071E54"; + Xwon(); + } + else if((signsOfBoxes[3] == 'X') && signsOfBoxes[3] == signsOfBoxes[4] && signsOfBoxes[4] == signsOfBoxes[5]){ + box4.style.backgroundColor = "#071E54"; + box5.style.backgroundColor = "#071E54"; + box6.style.backgroundColor = "#071E54"; + Xwon(); + } + else if((signsOfBoxes[1] == 'X') && signsOfBoxes[1] == signsOfBoxes[4] && signsOfBoxes[4] == signsOfBoxes[7]){ + box2.style.backgroundColor = "#071E54"; + box5.style.backgroundColor = "#071E54"; + box8.style.backgroundColor = "#071E54"; + Xwon(); + } + else if((signsOfBoxes[6] == 'X') && signsOfBoxes[6] == signsOfBoxes[7] && signsOfBoxes[7] == signsOfBoxes[8]){ + box7.style.backgroundColor = "#071E54"; + box8.style.backgroundColor = "#071E54"; + box9.style.backgroundColor = "#071E54"; + Xwon(); + } + else if((signsOfBoxes[2] == 'X') && signsOfBoxes[2] == signsOfBoxes[5] && signsOfBoxes[5] == signsOfBoxes[8]){ + box3.style.backgroundColor = "#071E54"; + box6.style.backgroundColor = "#071E54"; + box9.style.backgroundColor = "#071E54"; + Xwon(); + } + else if((signsOfBoxes[0] == 'X') && signsOfBoxes[0] == signsOfBoxes[4] && signsOfBoxes[4] == signsOfBoxes[8]){ + box1.style.backgroundColor = "#071E54"; + box5.style.backgroundColor = "#071E54"; + box9.style.backgroundColor = "#071E54"; + Xwon(); + } + else if((signsOfBoxes[2] == 'X') && signsOfBoxes[2] == signsOfBoxes[4] && signsOfBoxes[4] == signsOfBoxes[6]){ + box3.style.backgroundColor = "#071E54"; + box5.style.backgroundColor = "#071E54"; + box7.style.backgroundColor = "#071E54"; + Xwon(); + } + else if((signsOfBoxes[0] == 'O') && signsOfBoxes[0] == signsOfBoxes[3] && signsOfBoxes[3] == signsOfBoxes[6]){ + box1.style.backgroundColor = "#071E54"; + box4.style.backgroundColor = "#071E54"; + box7.style.backgroundColor = "#071E54"; + Owon(); + } + else if((signsOfBoxes[0] == 'O') && signsOfBoxes[0] == signsOfBoxes[1] && signsOfBoxes[1] == signsOfBoxes[2]){ + box1.style.backgroundColor = "#071E54"; + box2.style.backgroundColor = "#071E54"; + box3.style.backgroundColor = "#071E54"; + Owon(); + } + else if((signsOfBoxes[3] == 'O') && signsOfBoxes[3] == signsOfBoxes[4] && signsOfBoxes[4] == signsOfBoxes[5]){ + box4.style.backgroundColor = "#071E54"; + box5.style.backgroundColor = "#071E54"; + box6.style.backgroundColor = "#071E54"; + Owon(); + } + else if((signsOfBoxes[1] == 'O') && signsOfBoxes[1] == signsOfBoxes[4] && signsOfBoxes[4] == signsOfBoxes[7]){ + box2.style.backgroundColor = "#071E54"; + box5.style.backgroundColor = "#071E54"; + box8.style.backgroundColor = "#071E54"; + Owon(); + } + else if((signsOfBoxes[6] == 'O') && signsOfBoxes[6] == signsOfBoxes[7] && signsOfBoxes[7] == signsOfBoxes[8]){ + box7.style.backgroundColor = "#071E54"; + box8.style.backgroundColor = "#071E54"; + box9.style.backgroundColor = "#071E54"; + Owon(); + } + else if((signsOfBoxes[2] == 'O') && signsOfBoxes[2] == signsOfBoxes[5] && signsOfBoxes[5] == signsOfBoxes[8]){ + box3.style.backgroundColor = "#071E54"; + box6.style.backgroundColor = "#071E54"; + box9.style.backgroundColor = "#071E54"; + Owon(); + } + else if((signsOfBoxes[0] == 'O') && signsOfBoxes[0] == signsOfBoxes[4] && signsOfBoxes[4] == signsOfBoxes[8]){ + box1.style.backgroundColor = "#071E54"; + box5.style.backgroundColor = "#071E54"; + box9.style.backgroundColor = "#071E54"; + Owon(); + } + else if((signsOfBoxes[2] == 'O') && signsOfBoxes[2] == signsOfBoxes[4] && signsOfBoxes[4] == signsOfBoxes[6]){ + box3.style.backgroundColor = "#071E54"; + box5.style.backgroundColor = "#071E54"; + box7.style.backgroundColor = "#071E54"; + Owon(); + } + let countnumberOfmoves = 0; + for(var i=0; i<9; i++){ + if(signsOfBoxes[i] == 'O' || signsOfBoxes[i] == 'X') countnumberOfmoves++; + } + if(countnumberOfmoves == 9 && !wasResult) { + result.style.visibility = "visible"; + result.innerHTML = "Draw"; + turn.style.visibility = "hidden"; + } +} + +reset[0].onclick = function() {resetall()}; +function resetall(){ + home[0].style.visibility = "hidden"; + for(var i=0; i<9; i++) checkFilling[i]=0; + box1.innerHTML=""; + box2.innerHTML=""; + box3.innerHTML=""; + box4.innerHTML=""; + box5.innerHTML=""; + box6.innerHTML=""; + box7.innerHTML=""; + box8.innerHTML=""; + box9.innerHTML=""; + box1.style.backgroundColor="rgb(77, 109, 199)"; + box2.style.backgroundColor="rgb(77, 109, 199)"; + box3.style.backgroundColor="rgb(77, 109, 199)"; + box4.style.backgroundColor="rgb(77, 109, 199)"; + box5.style.backgroundColor="rgb(77, 109, 199)"; + box6.style.backgroundColor="rgb(77, 109, 199)"; + box7.style.backgroundColor="rgb(77, 109, 199)"; + box8.style.backgroundColor="rgb(77, 109, 199)"; + box9.style.backgroundColor="rgb(77, 109, 199)"; + + result.style.visibility = "hidden"; + + for(var i=0; i<9; i++) signsOfBoxes[i] = "P"; + + (initialSign == 'O') ? initialSign = 'X' : initialSign = 'O'; + wasResult = false; + turn.style.visibility = 'visible'; + for(var i=0; i<3; i++) for(var j=0; j<3; j++) board[i][j] = '_'; + if(player == 'friend') + two_playersgame(); + else { + (initialSign == 'X') ? (initialSign = 'O') : (initialSign = 'X'); + turn.style.visibility = "visible"; + one_playergame(); + } +} + +function goTohome(){ + window.location.reload(); +} +home[0].onclick = function(){goTohome()}; + + +/************************************************** ONE PLAYER MODE ****************************************************** */ +var board = [ [ '_', '_', '_' ], + [ '_', '_', '_' ], + [ '_', '_', '_' ] ]; +function roboPlays(){ + class Move + { + constructor() + { + let row,col; + } + } + + let player = initialSign, opponent = (player == 'X') ? 'O' : 'X'; + + function isMovesLeft(board) + { + for(let i = 0; i < 3; i++) + for(let j = 0; j < 3; j++) + if (board[i][j] == '_') + return true; + + return false; + } + function evaluate(b) + { + for(let row = 0; row < 3; row++) + { + if (b[row][0] == b[row][1] && + b[row][1] == b[row][2]) + { + if (b[row][0] == player) + return +10; + + else if (b[row][0] == opponent) + return -10; + } + } + for(let col = 0; col < 3; col++) + { + if (b[0][col] == b[1][col] && + b[1][col] == b[2][col]) + { + if (b[0][col] == player) + return +10; + + else if (b[0][col] == opponent) + return -10; + } + } + if (b[0][0] == b[1][1] && b[1][1] == b[2][2]) + { + if (b[0][0] == player) + return +10; + + else if (b[0][0] == opponent) + return -10; + } + + if (b[0][2] == b[1][1] && + b[1][1] == b[2][0]) + { + if (b[0][2] == player) + return +10; + + else if (b[0][2] == opponent) + return -10; + } + return 0; + } + function minimax(board, depth, isMax) + { + let score = evaluate(board); + + if (score == 10) + return score; + + if (score == -10) + return score; + + if (isMovesLeft(board) == false) + return 0; + + if (isMax) + { + let best = -1000; + for(let i = 0; i < 3; i++) + { + for(let j = 0; j < 3; j++) + { + if (board[i][j]=='_') + { + board[i][j] = player; + best = Math.max(best, minimax(board, + depth + 1, !isMax)); + board[i][j] = '_'; + } + } + } + return best; + } + else + { + let best = 1000; + for(let i = 0; i < 3; i++) + { + for(let j = 0; j < 3; j++) + { + if (board[i][j] == '_') + { + board[i][j] = opponent; + best = Math.min(best, minimax(board,depth + 1, !isMax)); + board[i][j] = '_'; + } + } + } + return best; + } + } + function findBestMove(board) + { + let bestVal = -1000; + let bestMove = new Move(); + bestMove.row = -1; + bestMove.col = -1; + + for(let i = 0; i < 3; i++) + { + for(let j = 0; j < 3; j++) + { + if (board[i][j] == '_') + { + board[i][j] = player; + let moveVal = minimax(board, 0, false); + board[i][j] = '_'; + if (moveVal > bestVal) + { + bestMove.row = i; + bestMove.col = j; + bestVal = moveVal; + } + } + } + } + return bestMove; + } + + let bestMove = findBestMove(board); + if(board[1][1] == '_') { + board[1][1] = 'X'; + document.getElementById('middle').innerHTML = 'X'; + checkFilling[4] = 1; + return; + } + else{ + try { + board[bestMove.row][bestMove.col] = 'X'; + } catch (error) { + home[0].style.visibility = "visible"; + result.style.visibility = "visible"; + result.innerHTML = "Draw"; + } + } + + if(bestMove.row == 0 && bestMove.col==0) { + checkFilling[0] = 1; + box1.innerHTML = 'X'; + return; + } + else if(bestMove.row == 0 && bestMove.col==1) { + checkFilling[1] = 1; + box2.innerHTML = 'X'; + return; + } + else if(bestMove.row == 0 && bestMove.col==2) { + checkFilling[2] = 1; + box3.innerHTML = 'X'; + return; + } + else if(bestMove.row == 1 && bestMove.col==0) { + checkFilling[3] = 1; + box4.innerHTML = 'X'; + return; + } + else if(bestMove.row == 1 && bestMove.col==1) { + checkFilling[4] = 1; + box5.innerHTML = 'X'; + return; + } + else if(bestMove.row == 1 && bestMove.col==2) { + checkFilling[5] = 1; + box6.innerHTML = 'X'; + } + else if(bestMove.row == 2 && bestMove.col==0) { + checkFilling[6] = 1; + box7.innerHTML = 'X'; + return; + } + else if(bestMove.row == 2 && bestMove.col==1) { + checkFilling[7] = 1; + box8.innerHTML = 'X'; + return; + } + else if(bestMove.row == 2 && bestMove.col==2) { + checkFilling[8] = 1; + box9.innerHTML = 'X'; + return; + } + checkifWon(); +} +var resHide = false; +function checkifWon(){ + resHide = false; + if((board[0][0]==board[0][1] && board[0][0] == board[0][2]) && board[0][0] == 'X' ) { + scoreX++; + box1.style.backgroundColor = "#071E54"; + box2.style.backgroundColor = "#071E54"; + box3.style.backgroundColor = "#071E54"; + x_score.innerHTML = "Computer's score: " + scoreX; + home[0].style.visibility = "visible"; + result.style.visibility = "visible"; + result.innerHTML = "Computer Won"; + for(var i=0; i<9; i++) checkFilling[i]=1; + resHide = true; + } + if((board[1][0]==board[1][1] && board[1][0] == board[1][2]) && board[1][0] == 'X' ) { + scoreX++; + box4.style.backgroundColor = "#071E54"; + box5.style.backgroundColor = "#071E54"; + box6.style.backgroundColor = "#071E54"; + x_score.innerHTML = "Computer's score: " + scoreX; + home[0].style.visibility = "visible"; + result.style.visibility = "visible"; + result.innerHTML = "Computer Won"; + for(var i=0; i<9; i++) checkFilling[i]=1; + resHide = true; + } + if((board[2][0]==board[2][1] && board[2][0] == board[2][2]) && board[2][0] == 'X' ) { + scoreX++; + box7.style.backgroundColor = "#071E54"; + box8.style.backgroundColor = "#071E54"; + box9.style.backgroundColor = "#071E54"; + x_score.innerHTML = "Computer's score: " + scoreX; + home[0].style.visibility = "visible"; + result.style.visibility = "visible"; + result.innerHTML = "Computer Won"; + for(var i=0; i<9; i++) checkFilling[i]=1; + resHide = true; + } + if((board[0][0]==board[1][0] && board[0][0] == board[2][0]) && board[2][0] == 'X' ) { + scoreX++; + box1.style.backgroundColor = "#071E54"; + box4.style.backgroundColor = "#071E54"; + box7.style.backgroundColor = "#071E54"; + x_score.innerHTML = "Computer's score: " + scoreX; + home[0].style.visibility = "visible"; + result.style.visibility = "visible"; + result.innerHTML = "Computer Won"; + for(var i=0; i<9; i++) checkFilling[i]=1; + resHide = true; + } + if((board[0][1]==board[1][1] && board[0][1] == board[2][1]) && board[0][1] == 'X' ) { + scoreX++; + box2.style.backgroundColor = "#071E54"; + box5.style.backgroundColor = "#071E54"; + box8.style.backgroundColor = "#071E54"; + x_score.innerHTML = "Computer's score: " + scoreX; + home[0].style.visibility = "visible"; + result.style.visibility = "visible"; + result.innerHTML = "Computer Won"; + for(var i=0; i<9; i++) checkFilling[i]=1; + resHide = true; + } + if((board[0][2]==board[1][2] && board[0][2] == board[2][2]) && board[0][2] == 'X' ) { + scoreX++; + box3.style.backgroundColor = "#071E54"; + box6.style.backgroundColor = "#071E54"; + box9.style.backgroundColor = "#071E54"; + x_score.innerHTML = "Computer's score: " + scoreX; + home[0].style.visibility = "visible"; + result.style.visibility = "visible"; + result.innerHTML = "Computer Won"; + for(var i=0; i<9; i++) checkFilling[i]=1; + resHide = true; + } + if((board[0][0]==board[1][1] && board[0][0] == board[2][2]) && board[0][0] == 'X' ) { + scoreX++; + box1.style.backgroundColor = "#071E54"; + box5.style.backgroundColor = "#071E54"; + box9.style.backgroundColor = "#071E54"; + x_score.innerHTML = "Computer's score: " + scoreX; + home[0].style.visibility = "visible"; + result.style.visibility = "visible"; + result.innerHTML = "Computer Won"; + for(var i=0; i<9; i++) checkFilling[i]=1; + resHide = true; + } + if((board[0][2]==board[1][1] && board[0][2] == board[2][0]) && board[0][2] == 'X' ) { + scoreX++; + box3.style.backgroundColor = "#071E54"; + box5.style.backgroundColor = "#071E54"; + box7.style.backgroundColor = "#071E54"; + result.style.visibility = "visible"; + result.innerHTML = "Computer Won"; + home[0].style.visibility = "visible"; + x_score.innerHTML = "Computer's score: " + scoreX; + for(var i=0; i<9; i++) checkFilling[i]=1; + resHide = true; + } + + if(resHide == true) turn.style.visibility = "hidden"; + var count_numberofO = 0; + var count_numberofX = 0; + for(var i=0; i<3; i++){ + for(var j=0; j<3; j++){ + if(board[i][j] == 'X') count_numberofX++; + if(board[i][j] == 'O') count_numberofO++; + } + } + if(count_numberofO + count_numberofX == 9){ + result.style.visibility = "visible"; + result.innerHTML = "Draw"; + turn.style.visibility = "hidden"; + home[0].style.visibility = "visible"; + } +} +function one_playergame(){ + if(initialSign == 'O') + { + roboPlays(); + player(); + } + else{ + turn.innerHTML = "O's turn"; + player(); + } + + function player(){ + + $('#topleft').click(function(){ + if(checkFilling[0]==0){ + document.getElementById('topleft').innerHTML = 'O'; + board[0][0] = 'O'; + checkFilling[0]=1; + roboPlays(); + checkifWon(); + } + }); + $('#top').click(function(){ + if(checkFilling[1]==0){ + document.getElementById('top').innerHTML = 'O'; + board[0][1] = 'O'; + checkFilling[1]=1; + roboPlays(); + checkifWon(); + } + }); + $('#topright').click(function(){ + if(checkFilling[2]==0){ + document.getElementById('topright').innerHTML = 'O'; + board[0][2] = 'O'; + checkFilling[2]=1; + roboPlays(); + checkifWon(); + } + }); + $('#left').click(function(){ + if(checkFilling[3]==0){ + document.getElementById('left').innerHTML = 'O'; + board[1][0] = 'O'; + checkFilling[3]=1; + roboPlays(); + checkifWon(); + } + }); + $('#middle').click(function(){ + if(checkFilling[4]==0){ + document.getElementById('middle').innerHTML = 'O'; + board[1][1] = 'O'; + checkFilling[4]=1; + roboPlays(); + checkifWon(); + } + }); + $('#right').click(function(){ + if(checkFilling[5]==0){ + document.getElementById('right').innerHTML = 'O'; + board[1][2] = 'O'; + checkFilling[5]=1; + roboPlays(); + checkifWon(); + } + }); + $('#bottomleft').click(function(){ + if(checkFilling[6]==0){ + document.getElementById('bottomleft').innerHTML = 'O'; + board[2][0] = 'O'; + checkFilling[6]=1; + roboPlays(); + checkifWon(); + } + }); + $('#bottom').click(function(){ + if(checkFilling[7]==0){ + document.getElementById('bottom').innerHTML = 'O'; + board[2][1] = 'O'; + checkFilling[7]=1; + roboPlays(); + checkifWon(); + } + }); + $('#bottomright').click(function(){ + if(checkFilling[8]==0){ + document.getElementById('bottomright').innerHTML = 'O'; + board[2][2] = 'O'; + checkFilling[8]=1; + roboPlays(); + checkifWon(); + } + }); + } +} \ No newline at end of file diff --git a/style.css b/style.css new file mode 100644 index 0000000..c1abde5 --- /dev/null +++ b/style.css @@ -0,0 +1,204 @@ +@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@200;300;400;500;600;700&display=swap'); +*{ + margin: 0; + padding: 0; + box-sizing: border-box; + font-family: Cambria, Cochin, Georgia, Times, "Times New Roman", serif; +} +body{ + background-image: url("img1.jpeg"); + opacity: 0.96; + background-size:cover; + overflow: hidden; + background-repeat: no-repeat; + height: 110vh; + width: 110vw; +} +.bg-image{ + background-image: url("img1.jpeg"); + filter:blur(6px); + -webkit-filter: blur(6px); + height:100vw; + overflow-y: visible; + background-size:cover; + overflow: hidden; + background-repeat: no-repeat; + height: 110vh; + width: 110vw; +} +#select-box{ + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + transition: all 0.3s ease; + background: #fff; + padding: 20px 25px 25px; + border-radius: 10px; + max-width: 400px; + width: 100% !important; + height: 500px !important; +} +#select-box.hide{ + opacity: 0; + pointer-events: none; +} +#select-box header{ + font-size: 30px; + font-weight: 600; + padding-bottom: 10px; + padding-left: 30%; + border-bottom: 1px solid lightgrey; +} +#select-box .title{ + font-size: 22px; + font-weight: 500; + margin: 20px 0; +} +#select-box .options{ + display: flex; + width: 100%; +} +.options button{ + width: 95%; + font-size: 20px; + font-weight: 500; + padding: 10px 0; + border: none; + background: #00BBF0; + border-radius: 5px; + color: #fff; + outline: none; + cursor: pointer; + transition: all 0.3s ease; +} +.options button:hover, +.btn button:hover{ + transform: scale(0.96); +} +.options button{ + margin-right: 5px; +} +.options button.friend, .options button.X{ + margin-left: 5px; +} +#select-box .credit{ + text-align: center; + margin-top: 20px; + font-size: 18px; + font-weight: 500; +} +#select-box .credit a{ + color: #00BBF0; + text-decoration: none; +} +.enternames input{ + all:none; + margin-left: 10%; + width:80%; + height:30px; + margin-bottom: 10px; + border: 2px solid black; +} +.start{ + margin-top: 30px; + margin-left: 3px; +} +.reset{ + width:65px; + height:35px; + border: none; + color: blue; + font-size: 20px; + float: right; + visibility: hidden; + margin-top: 255px; + cursor:pointer; +} +.home{ + width:65px; + height:35px; + height:0; + border: none; + color: blue; + font-size: 20px; + float: left; + visibility: hidden; + margin-top: 255px; + cursor:pointer; + background: #00BBF0 !important; +} + +#turn{ + float: left; + font-weight: bold; + /* height:23px !important; + width:70px; */ + background-color: rgb(219, 217, 82); + /* padding: 5px; */ + /* visibility: ; */ + padding: 5px; + visibility: hidden; + margin-left: 4.5vw; + margin-top: 3px; + padding-bottom: 0; +} +.box { + border: none; + display: flex; + justify-content: center; + align-items: center; + background-color: rgb(77, 109, 199); + height: 12rem; + width: 12rem; + cursor: pointer; + opacity:100%; +} +.board { + border: none; + display: grid; + margin-top: 0rem; + margin-left: 8.7rem; + grid-gap: 0.6rem; + background-color: black; + grid-template-columns: repeat(3, 12rem); + grid-template-rows: repeat(3, 12rem); + visibility: hidden; + height:0px; + font-size: 50px; + color: aqua; + font-weight: 900; +} +#x_score { + float: left; + font-weight: bold; + height:23px !important; + background-color: rgb(219, 217, 82); + padding: 5px; + visibility: hidden; +} + +#o_score { + float: right; + font-weight: bold; + height:23px !important;background-color: rgb(219, 217, 82); + padding: 5px; + visibility: hidden; +} +#result { + text-align: center; + padding: 0%; + margin-bottom:-10px; + padding-top: 10px; + font-size: 1.2rem; + font-weight: bold; + clear: both; + visibility: hidden; + height:50px !important; + width:150px !important; + padding-top: 0; + margin-left: 7vw; +} +header{ + padding-left: 3.5vw; +} \ No newline at end of file