Skip to content

Commit 4205ca4

Browse files
committed
Simple Guessing game
1 parent 3561269 commit 4205ca4

File tree

7 files changed

+198
-28
lines changed

7 files changed

+198
-28
lines changed

README.md

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# cs42_study
2+
# week 2, adding some User input examples!

index.html

+20-18
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,25 @@
11
<!DOCTYPE html>
22
<html>
3+
<head>
4+
<meta charset="utf-8">
5+
<meta name="viewport" content="width=device-width">
6+
<title>CS42 Week 1 Javascript Practice!</title>
37

4-
<head>
5-
<meta charset="utf-8">
6-
<meta name="viewport" content="width=device-width">
7-
<title>replit</title>
8-
<link href="style.css" rel="stylesheet" type="text/css" />
9-
</head>
8+
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx" crossorigin="anonymous">
9+
<link href="./style/style.css" rel="stylesheet">
10+
</head>
11+
<body>
12+
<h1>The Number Guessing Game!</h1>
13+
<div id="#gamecontainer">
1014

11-
<body>
12-
Hello world
13-
<script src="script.js"></script>
15+
<div class="mb-3">
16+
<label for="gameInput" class="form-label">Guess My Number</label>
17+
<input class="form-control" id="#gameInput" placeholder="??">
18+
</div>
19+
<button type="button" id="#gameBtn" class="btn btn-primary" >Check My Guess</button>
1420

15-
<!--
16-
This script places a badge on your repl's full-browser view back to your repl's cover
17-
page. Try various colors for the theme: dark, light, red, orange, yellow, lime, green,
18-
teal, blue, blurple, magenta, pink!
19-
-->
20-
<script src="https://replit.com/public/js/replit-badge.js" theme="blue" defer></script>
21-
</body>
22-
23-
</html>
21+
<div id="#output"></div>
22+
</div>
23+
<script src="./scripts/script.js"></script>
24+
</body>
25+
</html>

replit.nix

-6
This file was deleted.

script.js

Whitespace-only changes.

scripts/script.js

+172
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
2+
3+
console.log("Hello World!");
4+
5+
/* Events */
6+
var Events = {
7+
START: 0,
8+
GUESS: 1,
9+
CORRECT: 2,
10+
INCORRECT: 3
11+
}
12+
13+
/* States */
14+
var States = {
15+
START: 0,
16+
PLAYING: 1,
17+
GAMEOVER: 2
18+
}
19+
20+
/* Model */
21+
class Model {
22+
constructor () {
23+
this.gameState = States.START;
24+
this.theNumber = -1;
25+
this.guesses = 0;
26+
this.lastGuess = -1;
27+
}
28+
29+
init () {
30+
this.theNumber = Math.floor(Math.random() * 100) + 1
31+
this.guesses = 0
32+
this.lastGuess = -1
33+
}
34+
35+
guess (new_guess) {
36+
this.guesses++;
37+
this.lastGuess = new_guess;
38+
39+
if (new_guess == this.theNumber) {
40+
return Events.CORRECT;
41+
} else {
42+
return Events.INCORRECT;
43+
}
44+
}
45+
}
46+
47+
48+
/* View Interface */
49+
class View {
50+
constructor (root) {
51+
console.log("here!");
52+
this.root = root;
53+
this.gameOut = document.getElementById('#output')
54+
this.gameIn = document.getElementById("#gameInput")
55+
this.gameBtn = document.getElementById("#gameBtn")
56+
this.btn_cb = null;
57+
this.last_guess_count = 0;
58+
59+
this.btnHandler = this.btnHandler.bind(this);
60+
this.update = this.update.bind(this);
61+
62+
console.log(this.gameBtn);
63+
this.gameBtn.addEventListener("click", this.btnHandler);
64+
}
65+
66+
addButtonListener( btn_cb ) {
67+
this.btn_cb = btn_cb;
68+
}
69+
70+
btnHandler () {
71+
var inputText = this.gameIn.value;
72+
if (this.btn_cb) {
73+
this.btn_cb(parseInt(inputText));
74+
}
75+
}
76+
77+
update (model, event) {
78+
if (model.guesses == this.last_guess_count) {
79+
return;
80+
}
81+
this.last_guess_count = model.guesses;
82+
83+
if (model.lastGuess == "") {
84+
this.gameOut.innerHTML += "Type a number between 1 and 100!<br>";
85+
}
86+
87+
if (isNaN(model.lastGuess)) {
88+
this.gameOut.innerHTML += "That wasn't a number...<br>";
89+
}
90+
91+
if (model.lastGuess == model.theNumber) {
92+
this.gameOut.innerHTML += "You got it in " + model.guesses + " tries!<br>";
93+
}
94+
95+
if (model.lastGuess < model.theNumber) {
96+
this.gameOut.innerHTML += model.lastGuess + " was too low...<br>"
97+
}
98+
99+
if (model.lastGuess > model.theNumber) {
100+
this.gameOut.innerHTML += model.lastGuess + " was too high...<br>"
101+
}
102+
}
103+
}
104+
105+
106+
/* Control Logic */
107+
class Control {
108+
constructor () {
109+
this.fsm = this.fsm.bind(this);
110+
this.guessHandler = this.guessHandler.bind(this);
111+
this.setView = this.setView.bind(this);
112+
}
113+
114+
setView (view) {
115+
this.view = view;
116+
}
117+
118+
fsm(model, event, data) {
119+
switch (model.gameState) {
120+
case States.START:
121+
switch (event) {
122+
case Events.START:
123+
model.init();
124+
model.gameState = States.PLAYING;
125+
break;
126+
}
127+
break;
128+
129+
case States.PLAYING:
130+
switch (event) {
131+
case Events.GUESS: {
132+
var result = model.guess(data);
133+
this.fsm(model, result, data);
134+
} break;
135+
case Events.CORRECT:
136+
model.gameState = States.GAMEOVER;
137+
break;
138+
case Events.INCORRECT:
139+
model.gameState = States.PLAYING;
140+
break;
141+
}
142+
break;
143+
case States.GAMEOVER:
144+
break;
145+
}
146+
147+
this.view.update(model, event);
148+
}
149+
150+
guessHandler( guessText ) {
151+
q(Events.GUESS, guessText);
152+
}
153+
}
154+
155+
156+
157+
/* Main */
158+
var model = new Model();
159+
model.init();
160+
161+
var control = new Control();
162+
163+
var gameroot = document.getElementById("#gamecontainer");
164+
var view = new View(gameroot)
165+
view.addButtonListener(control.guessHandler);
166+
control.setView(view);
167+
168+
function q(event, data) {
169+
setTimeout(control.fsm, 0, model, event, data);
170+
}
171+
172+
control.fsm(model, Events.START, {});

style.css

-4
This file was deleted.

style/style.css

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
body {
2+
background: black;
3+
color: lime;
4+
}

0 commit comments

Comments
 (0)