diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 00000000..6f3a2913
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,3 @@
+{
+ "liveServer.settings.port": 5501
+}
\ No newline at end of file
diff --git a/3D-Portfolio/.gitignore b/3D-Portfolio/.gitignore
new file mode 100644
index 00000000..54f07af5
--- /dev/null
+++ b/3D-Portfolio/.gitignore
@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
\ No newline at end of file
diff --git a/3D-Portfolio/README.md b/3D-Portfolio/README.md
new file mode 100644
index 00000000..f768e33f
--- /dev/null
+++ b/3D-Portfolio/README.md
@@ -0,0 +1,8 @@
+# React + Vite
+
+This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
+
+Currently, two official plugins are available:
+
+- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh
+- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
diff --git a/3D-Portfolio/index.html b/3D-Portfolio/index.html
new file mode 100644
index 00000000..23036947
--- /dev/null
+++ b/3D-Portfolio/index.html
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+ I'm a skilled software developer with experience in TypeScript and
+ JavaScript, and expertise in frameworks like React, Node.js, and
+ Three.js. I'm a quick learner and collaborate closely with clients to
+ create efficient, scalable, and user-friendly solutions that solve
+ real-world problems. Let's work together to bring your ideas to life!
+
+
+
+
+ Following projects showcases my skills and experience through
+ real-world examples of my work. Each project is briefly described with
+ links to code repositories and live demos in it. It reflects my
+ ability to solve complex problems, work with different technologies,
+ and manage projects effectively.
+
+
+
+
\ No newline at end of file
diff --git a/Blog-Website/views/includes/post-item.ejs b/Blog-Website/views/includes/post-item.ejs
new file mode 100644
index 00000000..bc68dd37
--- /dev/null
+++ b/Blog-Website/views/includes/post-item.ejs
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Blogger-Website-main/blogers website/LICENSE b/Blogger-Website-main/blogers website/LICENSE
new file mode 100644
index 00000000..261eeb9e
--- /dev/null
+++ b/Blogger-Website-main/blogers website/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/Blogger-Website-main/blogers website/blog.html b/Blogger-Website-main/blogers website/blog.html
new file mode 100644
index 00000000..31a1d529
--- /dev/null
+++ b/Blogger-Website-main/blogers website/blog.html
@@ -0,0 +1,141 @@
+
+
+
+
+
+
+
+ I - blog
+
+
+
+
+
+
+
+
+
here us a oaragraoh fir the convence of dump right shit
+
+
+
+
+
+
The heaven for bloggers
+
i-blog is a website which lets you to upload your blogs and your blogs can make an imagineable reach for
+ your blogs
+
In my former life as a tech podcaster, I used to switch phones, smartwatches, and tablets with my co-host
+ for the entire month of January. He was an Android guy and I was all Apple all the time. This was always
+ an entertaining experiment (to us anyway) and made for many good discussions that you can still watch on
+ YouTube if you‘ve got some extra time on your hands.
+
+
+
+
\ No newline at end of file
diff --git a/Bootstrap Portfolio/Images/Coding Bench 2.jpg b/Bootstrap Portfolio/Images/Coding Bench 2.jpg
new file mode 100644
index 00000000..acf32310
Binary files /dev/null and b/Bootstrap Portfolio/Images/Coding Bench 2.jpg differ
diff --git a/Bootstrap Portfolio/Images/Coding Bench.jpg b/Bootstrap Portfolio/Images/Coding Bench.jpg
new file mode 100644
index 00000000..57e9e56f
Binary files /dev/null and b/Bootstrap Portfolio/Images/Coding Bench.jpg differ
diff --git a/Bootstrap Portfolio/Images/Contact Me.jfif b/Bootstrap Portfolio/Images/Contact Me.jfif
new file mode 100644
index 00000000..c8b1f47b
Binary files /dev/null and b/Bootstrap Portfolio/Images/Contact Me.jfif differ
diff --git a/Bootstrap Portfolio/Images/Designer.jpg b/Bootstrap Portfolio/Images/Designer.jpg
new file mode 100644
index 00000000..5a08f1cc
Binary files /dev/null and b/Bootstrap Portfolio/Images/Designer.jpg differ
diff --git a/Bootstrap Portfolio/Images/Filmmaker.png b/Bootstrap Portfolio/Images/Filmmaker.png
new file mode 100644
index 00000000..64e12683
Binary files /dev/null and b/Bootstrap Portfolio/Images/Filmmaker.png differ
diff --git a/Bootstrap Portfolio/Images/Photographer.jpg b/Bootstrap Portfolio/Images/Photographer.jpg
new file mode 100644
index 00000000..ef574a1a
Binary files /dev/null and b/Bootstrap Portfolio/Images/Photographer.jpg differ
diff --git a/Bootstrap Portfolio/Images/Profile-Photo.jpg b/Bootstrap Portfolio/Images/Profile-Photo.jpg
new file mode 100644
index 00000000..67a5f606
Binary files /dev/null and b/Bootstrap Portfolio/Images/Profile-Photo.jpg differ
diff --git a/Bootstrap Portfolio/Images/Signature.jpg b/Bootstrap Portfolio/Images/Signature.jpg
new file mode 100644
index 00000000..fd32e87f
Binary files /dev/null and b/Bootstrap Portfolio/Images/Signature.jpg differ
diff --git a/Bootstrap Portfolio/Images/icons8-portfolio-48.png b/Bootstrap Portfolio/Images/icons8-portfolio-48.png
new file mode 100644
index 00000000..8c33b425
Binary files /dev/null and b/Bootstrap Portfolio/Images/icons8-portfolio-48.png differ
diff --git a/Bootstrap Portfolio/README.md b/Bootstrap Portfolio/README.md
new file mode 100644
index 00000000..07ee2f27
--- /dev/null
+++ b/Bootstrap Portfolio/README.md
@@ -0,0 +1,57 @@
+# myPortfolioSite
+This is my personal Portfolio site desinged by me.
+
+## Table of Contents
+
+- [Getting Started](#getting-started)
+- [Projects](#projects)
+- [Contributing](#contributing)
+- [License](#license)
+
+## Getting Started
+
+To get started with this repository, follow these steps:
+
+1. Clone the repository to your local machine using the following command:
+
+ ```bash
+ git clone {{repository-url}}
+ ```
+
+2. Explore the repository and its contents to find the simple JavaScript projects that have been uploaded.
+
+3. Each project will have its own directory containing the necessary files and instructions to run the project.
+
+4. Follow the instructions provided in the project's `README.md` file to set up and run the project on your local machine.
+
+## Contributing
+
+Contributions to this repository are welcome! If you have a simple JavaScript project that you would like to share, please follow these steps:
+
+1. Fork the repository and clone it to your local machine.
+
+2. Create a new branch for your contribution:
+
+ ```bash
+ git checkout -b {{branch-name}}
+ ```
+
+3. Add your project to the repository. Make sure to include all the necessary files and instructions to run the project.
+
+4. Commit your changes with descriptive commit messages.
+
+5. Push your changes to your forked repository:
+
+ ```bash
+ git push origin {{branch-name}}
+ ```
+
+6. Open a pull request on the main repository and provide a detailed description of your project.
+
+Your project will be reviewed, and once approved, it will be merged into the main repository.
+
+## License
+
+This repository is licensed under the [MIT License](LICENSE). Feel free to use the code and resources for personal or commercial purposes.
+
+
diff --git a/Bootstrap Portfolio/index.html b/Bootstrap Portfolio/index.html
new file mode 100644
index 00000000..d0465650
--- /dev/null
+++ b/Bootstrap Portfolio/index.html
@@ -0,0 +1,171 @@
+
+
+
+
+
+
+
+ Sohail
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
I'm
+
Sohail
+
A Programmer Cum Photographer
+
+
+
+
+
+
+
+
+
+
+
+
+
Hello
+
+
I am a versatile creative professional, weaving the digital realm with my
+ skills. A
+ programmer and coder by nature, I find solace in crafting intricate websites and designs. My lens
+ captures not just moments but stories as a photographer and cinematographer, adding depth to my
+ creative narrative.
+
+
+
+
+
+
+
+
+
My Skills
+
+
+
+
+
+
+
Design & Development
+
+ I'm a boundary-pushing designer and developer, seamlessly blending creativity and code. With a
+ knack
+ for crafting captivating aesthetics, I breathe life into a wide spectrum of design
+ possibilities.
+
+
+
+
+
+
+
+
+
Photographer
+
+ Beyond design and code, my lens tells compelling stories. A seasoned photographer, I capture
+ emotions and moments, infusing my work with a cinematic touch that leaves an indelible
+ impression.
+
+
+
+
+
+
+
+
+
Cinematographer
+
+ As a skilled cinematographer, I transform visions into dynamic realities. Through lens and
+ motion, I
+ create immersive narratives, orchestrating light, angles, and motion to evoke powerful emotions
+ and
+ convey unforgettable tales.
+
+
+
+
+
+
+
+
+
+
+
Get In Touch
+
+ Feel free to reach out to me through the provided contact details. Whether you have questions, ideas, or
+ just want to connect, I'm here to listen and engage in meaningful conversations. Let's connect and
+ explore together.
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Bootstrap Portfolio/style.css b/Bootstrap Portfolio/style.css
new file mode 100644
index 00000000..2d073619
--- /dev/null
+++ b/Bootstrap Portfolio/style.css
@@ -0,0 +1,43 @@
+.intro-div{
+ width: 100%;
+ background-color: #A4CF5B;
+}
+.first-text{
+ letter-spacing: 2px;
+ font-family: 'Domine', serif;
+ font-size: 25px;
+}
+
+.Sohail-text{
+ font-family: 'Caveat', cursive;
+ letter-spacing: 5px;
+ font-size: 50px;
+}
+
+.intro-line{
+ letter-spacing: 3px;
+ color: #3B3935;
+}
+.rounded-image{
+ border-radius: 50%;
+}
+
+.hero-color{
+ background-color: #F3FDE8;
+}
+
+.brown-text{
+ letter-spacing: 2px;
+ font-family: 'Domine', serif;
+ color: #D39149;
+}
+.sarif-text{
+ font-family: 'Domine', serif;
+}
+.green-text{
+ color: #809F46;
+ font-family: 'Caveat';
+}
+.footer-bg{
+ background-color: black;
+}
\ No newline at end of file
diff --git a/Chess/Output (1).png b/Chess/Output (1).png
new file mode 100644
index 00000000..c3d8a29d
Binary files /dev/null and b/Chess/Output (1).png differ
diff --git a/Chess/Output (2).png b/Chess/Output (2).png
new file mode 100644
index 00000000..f809b9e3
Binary files /dev/null and b/Chess/Output (2).png differ
diff --git a/Chess/chess.py b/Chess/chess.py
new file mode 100644
index 00000000..6845f869
--- /dev/null
+++ b/Chess/chess.py
@@ -0,0 +1,230 @@
+# Game of chess in python programming language
+
+
+import itertools
+WHITE = "white"
+BLACK = "black"
+
+class Game:
+ #ive decided since the number of pieces is capped but the type of pieces is not (pawn transformations), I've already coded much of the modularity to support just using a dictionary of pieces
+ def __init__(self):
+ self.playersturn = BLACK
+ self.message = "this is where prompts will go"
+ self.gameboard = {}
+ self.placePieces()
+ print("chess program. enter moves in algebraic notation separated by space")
+ self.main()
+
+
+ def placePieces(self):
+
+ for i in range(0,8):
+ self.gameboard[(i,1)] = Pawn(WHITE,uniDict[WHITE][Pawn],1)
+ self.gameboard[(i,6)] = Pawn(BLACK,uniDict[BLACK][Pawn],-1)
+
+ placers = [Rook,Knight,Bishop,Queen,King,Bishop,Knight,Rook]
+
+ for i in range(0,8):
+ self.gameboard[(i,0)] = placers[i](WHITE,uniDict[WHITE][placers[i]])
+ self.gameboard[((7-i),7)] = placers[i](BLACK,uniDict[BLACK][placers[i]])
+ placers.reverse()
+
+
+ def main(self):
+
+ while True:
+ self.printBoard()
+ print(self.message)
+ self.message = ""
+ startpos,endpos = self.parseInput()
+ try:
+ target = self.gameboard[startpos]
+ except:
+ self.message = "could not find piece; index probably out of range"
+ target = None
+
+ if target:
+ print("found "+str(target))
+ if target.Color != self.playersturn:
+ self.message = "you aren't allowed to move that piece this turn"
+ continue
+ if target.isValid(startpos,endpos,target.Color,self.gameboard):
+ self.message = "that is a valid move"
+ self.gameboard[endpos] = self.gameboard[startpos]
+ del self.gameboard[startpos]
+ self.isCheck()
+ if self.playersturn == BLACK:
+ self.playersturn = WHITE
+ else : self.playersturn = BLACK
+ else :
+ self.message = "invalid move" + str(target.availableMoves(startpos[0],startpos[1],self.gameboard))
+ print(target.availableMoves(startpos[0],startpos[1],self.gameboard))
+ else : self.message = "there is no piece in that space"
+
+ def isCheck(self):
+ #ascertain where the kings are, check all pieces of opposing color against those kings, then if either get hit, check if its checkmate
+ king = King
+ kingDict = {}
+ pieceDict = {BLACK : [], WHITE : []}
+ for position,piece in self.gameboard.items():
+ if type(piece) == King:
+ kingDict[piece.Color] = position
+ print(piece)
+ pieceDict[piece.Color].append((piece,position))
+ #white
+ if self.canSeeKing(kingDict[WHITE],pieceDict[BLACK]):
+ self.message = "White player is in check"
+ if self.canSeeKing(kingDict[BLACK],pieceDict[WHITE]):
+ self.message = "Black player is in check"
+
+
+ def canSeeKing(self,kingpos,piecelist):
+ #checks if any pieces in piece list (which is an array of (piece,position) tuples) can see the king in kingpos
+ for piece,position in piecelist:
+ if piece.isValid(position,kingpos,piece.Color,self.gameboard):
+ return True
+
+ def parseInput(self):
+ try:
+ a,b = input().split()
+ a = ((ord(a[0])-97), int(a[1])-1)
+ b = (ord(b[0])-97, int(b[1])-1)
+ print(a,b)
+ return (a,b)
+ except:
+ print("error decoding input. please try again")
+ return((-1,-1),(-1,-1))
+
+ """def validateInput(self, *kargs):
+ for arg in kargs:
+ if type(arg[0]) is not type(1) or type(arg[1]) is not type(1):
+ return False
+ return True"""
+
+ def printBoard(self):
+ print(" 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |")
+ for i in range(0,8):
+ print("-"*32)
+ print(chr(i+97),end="|")
+ for j in range(0,8):
+ item = self.gameboard.get((i,j)," ")
+ print(str(item)+' |', end = " ")
+ print()
+ print("-"*32)
+
+
+
+ """game class. contains the following members and methods:
+ two arrays of pieces for each player
+ 8x8 piece array with references to these pieces
+ a parse function, which turns the input from the user into a list of two tuples denoting start and end points
+ a checkmateExists function which checks if either players are in checkmate
+ a checkExists function which checks if either players are in check (woah, I just got that nonsequitur)
+ a main loop, which takes input, runs it through the parser, asks the piece if the move is valid, and moves the piece if it is. if the move conflicts with another piece, that piece is removed. ischeck(mate) is run, and if there is a checkmate, the game prints a message as to who wins
+ """
+
+class Piece:
+
+ def __init__(self,color,name):
+ self.name = name
+ self.position = None
+ self.Color = color
+ def isValid(self,startpos,endpos,Color,gameboard):
+ if endpos in self.availableMoves(startpos[0],startpos[1],gameboard, Color = Color):
+ return True
+ return False
+ def __repr__(self):
+ return self.name
+
+ def __str__(self):
+ return self.name
+
+ def availableMoves(self,x,y,gameboard):
+ print("ERROR: no movement for base class")
+
+ def AdNauseum(self,x,y,gameboard, Color, intervals):
+ """repeats the given interval until another piece is run into.
+ if that piece is not of the same color, that square is added and
+ then the list is returned"""
+ answers = []
+ for xint,yint in intervals:
+ xtemp,ytemp = x+xint,y+yint
+ while self.isInBounds(xtemp,ytemp):
+ #print(str((xtemp,ytemp))+"is in bounds")
+
+ target = gameboard.get((xtemp,ytemp),None)
+ if target is None: answers.append((xtemp,ytemp))
+ elif target.Color != Color:
+ answers.append((xtemp,ytemp))
+ break
+ else:
+ break
+
+ xtemp,ytemp = xtemp + xint,ytemp + yint
+ return answers
+
+ def isInBounds(self,x,y):
+ "checks if a position is on the board"
+ if x >= 0 and x < 8 and y >= 0 and y < 8:
+ return True
+ return False
+
+ def noConflict(self,gameboard,initialColor,x,y):
+ "checks if a single position poses no conflict to the rules of chess"
+ if self.isInBounds(x,y) and (((x,y) not in gameboard) or gameboard[(x,y)].Color != initialColor) : return True
+ return False
+
+
+chessCardinals = [(1,0),(0,1),(-1,0),(0,-1)]
+chessDiagonals = [(1,1),(-1,1),(1,-1),(-1,-1)]
+
+def knightList(x,y,int1,int2):
+ """sepcifically for the rook, permutes the values needed around a position for noConflict tests"""
+ return [(x+int1,y+int2),(x-int1,y+int2),(x+int1,y-int2),(x-int1,y-int2),(x+int2,y+int1),(x-int2,y+int1),(x+int2,y-int1),(x-int2,y-int1)]
+def kingList(x,y):
+ return [(x+1,y),(x+1,y+1),(x+1,y-1),(x,y+1),(x,y-1),(x-1,y),(x-1,y+1),(x-1,y-1)]
+
+
+
+class Knight(Piece):
+ def availableMoves(self,x,y,gameboard, Color = None):
+ if Color is None : Color = self.Color
+ return [(xx,yy) for xx,yy in knightList(x,y,2,1) if self.noConflict(gameboard, Color, xx, yy)]
+
+class Rook(Piece):
+ def availableMoves(self,x,y,gameboard ,Color = None):
+ if Color is None : Color = self.Color
+ return self.AdNauseum(x, y, gameboard, Color, chessCardinals)
+
+class Bishop(Piece):
+ def availableMoves(self,x,y,gameboard, Color = None):
+ if Color is None : Color = self.Color
+ return self.AdNauseum(x, y, gameboard, Color, chessDiagonals)
+
+class Queen(Piece):
+ def availableMoves(self,x,y,gameboard, Color = None):
+ if Color is None : Color = self.Color
+ return self.AdNauseum(x, y, gameboard, Color, chessCardinals+chessDiagonals)
+
+class King(Piece):
+ def availableMoves(self,x,y,gameboard, Color = None):
+ if Color is None : Color = self.Color
+ return [(xx,yy) for xx,yy in kingList(x,y) if self.noConflict(gameboard, Color, xx, yy)]
+
+class Pawn(Piece):
+ def __init__(self,color,name,direction):
+ self.name = name
+ self.Color = color
+ #of course, the smallest piece is the hardest to code. direction should be either 1 or -1, should be -1 if the pawn is traveling "backwards"
+ self.direction = direction
+ def availableMoves(self,x,y,gameboard, Color = None):
+ if Color is None : Color = self.Color
+ answers = []
+ if (x+1,y+self.direction) in gameboard and self.noConflict(gameboard, Color, x+1, y+self.direction) : answers.append((x+1,y+self.direction))
+ if (x-1,y+self.direction) in gameboard and self.noConflict(gameboard, Color, x-1, y+self.direction) : answers.append((x-1,y+self.direction))
+ if (x,y+self.direction) not in gameboard and Color == self.Color : answers.append((x,y+self.direction))# the condition after the and is to make sure the non-capturing movement (the only fucking one in the game) is not used in the calculation of checkmate
+ return answers
+
+uniDict = {WHITE : {Pawn : "♙", Rook : "♖", Knight : "♘", Bishop : "♗", King : "♔", Queen : "♕" }, BLACK : {Pawn : "♟", Rook : "♜", Knight : "♞", Bishop : "♝", King : "♚", Queen : "♛" }}
+
+Game()
diff --git a/City Finder/index.html b/City Finder/index.html
new file mode 100644
index 00000000..53d16121
--- /dev/null
+++ b/City Finder/index.html
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+ Skypeia
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/GoogleAuthFirebase/script.js b/GoogleAuthFirebase/script.js
new file mode 100644
index 00000000..8471fa38
--- /dev/null
+++ b/GoogleAuthFirebase/script.js
@@ -0,0 +1,24 @@
+// function onSignIn(googleUser) {
+// var profile = googleUser.getBasicProfile();
+// $("#name").text(profile.getName());
+// $("#email").text(profile.getEmail());
+// $("#image").attr('src',profile.getImageUrl());
+// $(".data").css("display","block");
+// $(".g-signin2").css("display","block");
+// }
+
+
+// function signin() {
+// let oauth2Endpoint = "https://accounts.com/o/oauth2/v2/auth"
+
+// let form = document.createElement('form')
+// form.setAttribute('methode', 'GET')
+// form.setAttribute('action',oauth2Endpoint)
+
+// let params ={
+// "client_id":"",
+// "redirect_uri":"",
+// "response_type":"token",
+// "scope":
+
+// };
diff --git a/GoogleAuthFirebase/style1.css b/GoogleAuthFirebase/style1.css
new file mode 100644
index 00000000..2da0ab1b
--- /dev/null
+++ b/GoogleAuthFirebase/style1.css
@@ -0,0 +1,10 @@
+.data{
+ display: none;
+}
+.g-signin2{
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ margin-top: -50%;
+ margin-left: -50%;
+}
\ No newline at end of file
diff --git a/Hangman Game/README.md b/Hangman Game/README.md
new file mode 100644
index 00000000..5f028543
--- /dev/null
+++ b/Hangman Game/README.md
@@ -0,0 +1,23 @@
+# Hangman Game
+
+Hangman Game is a classic word-guessing game where players attempt to guess a hidden word by suggesting letters within a limited number of attempts. The game is both entertaining and challenging, making it a popular choice for honing vocabulary and problem-solving skills.
+
+## How to Play
+
+1. A secret word is chosen, and its letters are represented by underscores (_).
+2. The player guesses one letter at a time.
+3. If the guessed letter is in the secret word, all instances of that letter are revealed.
+4. If the guessed letter is not in the secret word, a part of the "hangman" figure is drawn.
+5. The player wins by guessing the entire word before the hangman is completely drawn.
+6. The player loses if the hangman figure is fully drawn before the word is guessed.
+
+## Features
+
+- Simple and intuitive gameplay.
+- Interactive interface for guessing letters.
+- Visual representation of the hangman's progress.
+- Randomly selected words for replayability.
+- Limited attempts to add challenge.
+
+Enjoy the challenge of word guessing in the Hangman Game! Test your linguistic skills and have fun trying to outsmart the game.
+
diff --git a/Hangman Game/images/hangman-0.svg b/Hangman Game/images/hangman-0.svg
new file mode 100644
index 00000000..1e7cd8b3
--- /dev/null
+++ b/Hangman Game/images/hangman-0.svg
@@ -0,0 +1,9 @@
+
diff --git a/Hangman Game/images/hangman-1.svg b/Hangman Game/images/hangman-1.svg
new file mode 100644
index 00000000..e5496350
--- /dev/null
+++ b/Hangman Game/images/hangman-1.svg
@@ -0,0 +1,13 @@
+
diff --git a/Hangman Game/images/hangman-2.svg b/Hangman Game/images/hangman-2.svg
new file mode 100644
index 00000000..a0a3a653
--- /dev/null
+++ b/Hangman Game/images/hangman-2.svg
@@ -0,0 +1,14 @@
+
diff --git a/Hangman Game/images/hangman-3.svg b/Hangman Game/images/hangman-3.svg
new file mode 100644
index 00000000..c605f933
--- /dev/null
+++ b/Hangman Game/images/hangman-3.svg
@@ -0,0 +1,15 @@
+
diff --git a/Hangman Game/images/hangman-4.svg b/Hangman Game/images/hangman-4.svg
new file mode 100644
index 00000000..e23445a5
--- /dev/null
+++ b/Hangman Game/images/hangman-4.svg
@@ -0,0 +1,16 @@
+
diff --git a/Hangman Game/images/hangman-5.svg b/Hangman Game/images/hangman-5.svg
new file mode 100644
index 00000000..2a60dd56
--- /dev/null
+++ b/Hangman Game/images/hangman-5.svg
@@ -0,0 +1,21 @@
+
diff --git a/Hangman Game/images/hangman-6.svg b/Hangman Game/images/hangman-6.svg
new file mode 100644
index 00000000..c8a6a740
--- /dev/null
+++ b/Hangman Game/images/hangman-6.svg
@@ -0,0 +1,22 @@
+
diff --git a/Hangman Game/images/lost.gif b/Hangman Game/images/lost.gif
new file mode 100644
index 00000000..3ea3e4f6
Binary files /dev/null and b/Hangman Game/images/lost.gif differ
diff --git a/Hangman Game/images/victory.gif b/Hangman Game/images/victory.gif
new file mode 100644
index 00000000..b460d31b
Binary files /dev/null and b/Hangman Game/images/victory.gif differ
diff --git a/Hangman Game/index.html b/Hangman Game/index.html
new file mode 100644
index 00000000..b9c6fc09
--- /dev/null
+++ b/Hangman Game/index.html
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+ Hangman
+
+
+
+