From 74367e7b3e8278123faf85b74fb2ef37a5594754 Mon Sep 17 00:00:00 2001 From: readhame Date: Wed, 3 Jun 2020 10:57:36 +0200 Subject: [PATCH] Premiere version qui marche pas totalement --- HyperSet/.idea/HyperSet.iml | 8 ++ HyperSet/.idea/misc.xml | 6 ++ HyperSet/.idea/modules.xml | 8 ++ HyperSet/.idea/workspace.xml | 49 +++++++++ HyperSet/card.php | 18 ++++ HyperSet/cardAttributes.php | 17 +++ HyperSet/css/style.css | 79 ++++++++++++++ HyperSet/deck.php | 62 +++++++++++ HyperSet/functions.php | 7 ++ HyperSet/game.php | 18 ++++ HyperSet/images/diamond.png | Bin 0 -> 2914 bytes HyperSet/images/oval.png | Bin 0 -> 1498 bytes HyperSet/images/wave.png | Bin 0 -> 2049 bytes HyperSet/index.html | 21 ++++ HyperSet/player.php | 14 +++ HyperSet/set.js | 202 +++++++++++++++++++++++++++++++++++ HyperSet/set.php | 18 ++++ 17 files changed, 527 insertions(+) create mode 100644 HyperSet/.idea/HyperSet.iml create mode 100644 HyperSet/.idea/misc.xml create mode 100644 HyperSet/.idea/modules.xml create mode 100644 HyperSet/.idea/workspace.xml create mode 100644 HyperSet/card.php create mode 100644 HyperSet/cardAttributes.php create mode 100644 HyperSet/css/style.css create mode 100644 HyperSet/deck.php create mode 100644 HyperSet/functions.php create mode 100644 HyperSet/game.php create mode 100644 HyperSet/images/diamond.png create mode 100644 HyperSet/images/oval.png create mode 100644 HyperSet/images/wave.png create mode 100644 HyperSet/index.html create mode 100644 HyperSet/player.php create mode 100644 HyperSet/set.js create mode 100644 HyperSet/set.php diff --git a/HyperSet/.idea/HyperSet.iml b/HyperSet/.idea/HyperSet.iml new file mode 100644 index 0000000..c956989 --- /dev/null +++ b/HyperSet/.idea/HyperSet.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/HyperSet/.idea/misc.xml b/HyperSet/.idea/misc.xml new file mode 100644 index 0000000..28a804d --- /dev/null +++ b/HyperSet/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/HyperSet/.idea/modules.xml b/HyperSet/.idea/modules.xml new file mode 100644 index 0000000..7b839fc --- /dev/null +++ b/HyperSet/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/HyperSet/.idea/workspace.xml b/HyperSet/.idea/workspace.xml new file mode 100644 index 0000000..e99d458 --- /dev/null +++ b/HyperSet/.idea/workspace.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1591174032513 + + + + + + \ No newline at end of file diff --git a/HyperSet/card.php b/HyperSet/card.php new file mode 100644 index 0000000..f048680 --- /dev/null +++ b/HyperSet/card.php @@ -0,0 +1,18 @@ + $value) { + $this->{$attribute} = $value; + } + + $deck->cards[] = $this; + } +} \ No newline at end of file diff --git a/HyperSet/cardAttributes.php b/HyperSet/cardAttributes.php new file mode 100644 index 0000000..6b2679c --- /dev/null +++ b/HyperSet/cardAttributes.php @@ -0,0 +1,17 @@ +color = $color; + $this->shape = $shape; + $this->fill = $fill; + $this->number = $number; + $this->id = $id; +} +} \ No newline at end of file diff --git a/HyperSet/css/style.css b/HyperSet/css/style.css new file mode 100644 index 0000000..3da4320 --- /dev/null +++ b/HyperSet/css/style.css @@ -0,0 +1,79 @@ +* { + box-sizing: border-box; +} + +body { + font-family: Arial, sans-serif; + text-align: center; +} + +h1 { + font-size: 40px; +} + +.submit { + margin-top: 2em; + font-size: 16px; + padding: 1em 3em; + background: #BADA55; + color: #000; +} + +.submit:disabled { + background: #C5DA83; + color: #666; +} + +.wrapper { + width: 1080px; + margin: 0 auto; +} + +.card { + display: inline-block; + width: 245px; + margin-right: 5px; + height: 200px; + border: 2px solid #ccc; +} +.card:hover { + border-color: #e2e2e2; +} + +.selected { + background: #eee; +} + +.game-board { + width: 1000px; + margin: 0 auto; +} + +.shape { + display: inline-block; + width: 70px; + height: 200px; + -webkit-mask-repeat: no-repeat; + -webkit-mask-position: 15px; +} +.diamond { + -webkit-mask-image: url('../images/diamond.png'); +} +.wave { + -webkit-mask-image: url('../images/wave.png'); +} +.oval { + -webkit-mask-image: url('../images/oval.png'); +} + +.green { + background: green; +} +.red { + background: red;; +} +.purple { + background: violet; +} + +/*solution pour avoir l'image en rainure ou vide a voir dans le css*/ \ No newline at end of file diff --git a/HyperSet/deck.php b/HyperSet/deck.php new file mode 100644 index 0000000..2662a56 --- /dev/null +++ b/HyperSet/deck.php @@ -0,0 +1,62 @@ +createDeck(); + } + + private function createDeck() { + // need one card of each combo of color/shape/fill/number + $colors = array('green', 'red', 'purple'); + $shapes = array('oval', 'diamond', 'wave'); + $fills = array('filled', 'shaded', 'empty'); + $numbers = array(1, 2, 3); + + $index = 1; + + foreach ($colors as $color) { + foreach ($shapes as $shape) { + foreach ($fills as $fill) { + foreach ($numbers as $number) { + $cardAttributes = new CardAttributes($color, $shape, $fill, $number, $index); + $card = new Card($cardAttributes, $this); + $index++; + } + } + } + + } + + } + + public function removeSet($cards) { + + } + + private function shuffle() { + shuffle($this->cards); + } + + + + public function deal() { + // shuffle the deck + $this->shuffle(); + + // remove 12 cards from the top and return them + $dealtCards = array_chop($this->cards, 12); + return $dealtCards; + } + + public function threeMore() { + return array_chop($this->cards, 3); + } + +} \ No newline at end of file diff --git a/HyperSet/functions.php b/HyperSet/functions.php new file mode 100644 index 0000000..e32db6d --- /dev/null +++ b/HyperSet/functions.php @@ -0,0 +1,7 @@ +deck = $deck; + } + + public function start() { + + // call the deck's deal function and return the cards dealt + return $this->deck->deal(); + + } +} \ No newline at end of file diff --git a/HyperSet/images/diamond.png b/HyperSet/images/diamond.png new file mode 100644 index 0000000000000000000000000000000000000000..3805d19d835c87947aedb8ed5461b85273f816a7 GIT binary patch literal 2914 zcmd^B`BRg38js_F1FcTA?O4w=-mT^UuSBRv08JG~fmU3#HYP6+F^41^T3b)5)~;Rc zA&OX}&?+9g+VO_m2{}jt0ZfDhkfK2$@0F7zZ`c>Bc7Is+AJ}K+{T|OepU-o?@4Uy> zuUqwI?8I0Cf$%14b#gksFUB9<=;8Q!>A)HfzP%?&$&zFUvn56Be1NcmE8GqcS$uX5 zkPfi9yLah3|?lIBr9z#gCpdV*+VwuV!jAR69|dRibZTr9v~rZ2Xc6VBocIA zMk4aKNu-Sn)2L}8CXmZpy(b^Y*t0H^vnP*3=aQCvL`*DZ-~@a?!X_5;cM8Oe;v~{@ zUIu<1Qd3C8=O&W8B+{QjWu>hrGKKj7aUq#HpF>?lBQ9D%rY)e-7trSs_J5fRYY~g$4N>ym8snhg^vm%zS_? z5$0zKg*#tXaeb~(A{6HeMMP%CLNbk*#^&$@Lz?G^v@`}wAeOKN9DtRaM8Y}9JRX<9 zOh}=nrc!Aumn@*sXekNwgyhr|`idnf%!HLoR?_2NVv~iO0zM#+yu@<B^YOtxT6hJ2sfH8Qugy&9ALxG??6djot)5mhYBD2c9c-wFH7Z!6hqNk4 zBL|grpd7=nP-MW1`P#jX2VPsVw@D3am9SC^sg9Ku3Y)NJ$HBhiQk(YQlySD?ogbm@@#02ZioOO3D*2_cQ1W*I1tU|~nVVS@FZ zFyhDj7PJu!p(eDU5p6=lh#Hjlhx!eu!Gs#ku-*(CtezJ404N1zPlCNNNU8=E&w_nM zSnrK^z%U4fK~DtH!m18$I~a1yA(;Y{DnYptR45_29IR7j z84!cYtuVp{I0O$4Vh?@oa2Sz-aw#OY``e_DqRroKfb~sYs~K*PK?)RoStHum!(gaihvJ=bH=>qCkEIE7Ll?0nqgB;q7qhihpt{Pp8F?UMAiqWep3(v;H?mxEaqSLvIQ1LeVc=DYnZrsQ* z-&_Qo_77K%sx}(vKIJgdi78b->=L9cpErhAT^=YZxyUKHG}CFQBu>3>x%wQt=3p0* zbL#MM>DujGznAqV2F8^Qzw-x6a%S17_gV^P(w&kY4WJT_&D9X+WjRW|jd|K- zPCv0ZF-u!=@0+`|TbGliE#r1+shezBA4--&aA!?=$zWCHTfzgL@?j{lq!g-6Ak6xD zM=`jH@x5MpOz487VHusr0doiYcBKd{!%U14+vbfxX*>XQ}g8^yu z#W5D&r>?@Wxs~^<-4mk?tjDDA=5y`bisLn56Zzu)gVu$<#rNa*`xnLMuKjja-rQr0 z)nA-%Z&ml^e2jUb=|7x~v-#P9JKW@cp)r zo=x>n;GCyy&6u+ZMg7^X)}z(pDP@}OWR{Ijgp;;<`KMHzcVx^Zf5)_dNRI4(;rH=z)0E4F|p7pC{}7;O%zN8ved(xw9*` z-2J20GpCZ8{nL%s?}M&v=eW_QE8aPGyOh<;kY1otj$WJ7_iNod`q?cvm^HqO4IW=#+AHOamW9O!w zRzt@m-{ZsmPbk$_jyvC?%V;~U39ui^keha zl1@=g=wZ{?OZS<=dyJoLH(D}NR&AOVNeb_)K~LQ}@zllrY?*oErM{m%UtYNsTYh;j wLHMm7gE{H`y<;cK`qY literal 0 HcmV?d00001 diff --git a/HyperSet/images/oval.png b/HyperSet/images/oval.png new file mode 100644 index 0000000000000000000000000000000000000000..7d9a873f144dc969474e5b2af999b50b3bbd7562 GIT binary patch literal 1498 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 B?8pEB literal 0 HcmV?d00001 diff --git a/HyperSet/index.html b/HyperSet/index.html new file mode 100644 index 0000000..a39cced --- /dev/null +++ b/HyperSet/index.html @@ -0,0 +1,21 @@ + + + + + + Set + + + + +
+

(TEST) Set

+

Find sets.

+

Sets found: 0

+
+
+ + + + + diff --git a/HyperSet/player.php b/HyperSet/player.php new file mode 100644 index 0000000..a785c06 --- /dev/null +++ b/HyperSet/player.php @@ -0,0 +1,14 @@ +score += $points; +} +} \ No newline at end of file diff --git a/HyperSet/set.js b/HyperSet/set.js new file mode 100644 index 0000000..010c81e --- /dev/null +++ b/HyperSet/set.js @@ -0,0 +1,202 @@ +var Game = { + cards: [], + selected: [], + score: 0, + $board: $('[data-display="game-board"]'), + $score: $('[data-display="score"]'), + + deal: function() { + var self = this; + + // ajax request to get initial set of cards + var dealRequest = $.ajax({ + url: 'set.php?action=deal', + type: 'GET', + dataType: 'json', + success: function(data) { + self.cards = data; + self.displayCards.call(self); + self.setCardListeners(); + self.setPageListeners(); + } + }); + }, + + displayCards: function() { + var self = this; + + $.each(this.cards, function(index, card){ + var cardNode = $('
'); + cardNode.addClass('card'); + $(cardNode).data({ + 'id': card.id, + 'shape': card.shape, + 'color': card.color, + 'number': card.number + }); + + var shapeNode = $(''); + shapeNode.addClass('shape ' + card.color + ' ' + card.shape + ' ' + card.fill); + + + for (var i = 0; i < card.number; i++) { + cardNode.append(shapeNode.clone()); + } + self.$board.append(cardNode); + + // display 4 cards per row + if ((index+1) % 4 === 0) { + self.$board.append($('
')); + } + }); + }, + + setCardListeners: function() { + var self = this; + + // what happens when a card is clicked: + this.$board.on('click', '.card', function(e) { + e.stopImmediatePropagation(); + var card = e.currentTarget; + + // if card is new, add it, otherwise remove it + var ids = $.map(self.selected, function(el) { return $(el).data("id");}); + if (ids.indexOf($(card).data('id')) >= 0) { + self.deselectCard(card); + } else { + self.selectCard(card); + } + + if (self.selected.length === 3) { + self.silentSubmission(); + } + }); + }, + + setPageListeners: function() { + var self = this; + + // if the user clicks on the page outside the game board, clear selected + $(document).on('click', function() { + self.clearSelections.call(self); + }); + }, + + selectCard: function(card) { + $(card).addClass('selected'); + this.selected.push(card); + + if (this.selected.length > 3) { + var removed = this.selected.shift(); + $(removed).removeClass('selected'); + } + + }, + + deselectCard: function(card) { + var self = this; + var index = self.selected.indexOf(card); + if (index > -1) { + self.selected.splice(index, 1); + } + $(card).removeClass('selected'); + }, + + clearSelections: function() { + $.each(this.selected, function(index, card) { + $(card).removeClass('selected'); + }); + this.selected = []; + }, + + validateSet: function() { + var self = this; + + var colors = $.map(self.selected, function(el) { return $(el).data("color");}); + var shapes = $.map(self.selected, function(el) { return $(el).data("shape"); }); + var numbers = $.map(self.selected, function(el) { return $(el).data("number"); }); + + + return (self.isSet(colors) && self.isSet(shapes) && self.isSet(numbers)); + }, + + isSet: function(arr) { + // a set means the attributes are either all the same or all different + var reduced = $.unique(arr); + return (reduced.length === 1 || reduced.length === 3); + }, + + silentSubmission: function() { + var valid = this.validateSet(); + if (valid) { + this.submitSet(); + } + }, + + submitSet: function() { + var self = this; + var ids = $.map(self.selected, function(el) { return $(el).data("id");}); + + // ajax request to get initial set of cards + var newCardRequest = $.ajax({ + url: 'set.php?action=submit', + type: 'GET', + dataType: 'json', + success: function(data) { + self.clearCards(ids); + // to do - implement game complete check on server + if (!data.gameComplete) { + self.updateCards(data); + self.increaseScore(); + } else { + self.gameWon(); + } + }, + error: function() { + console.log(arguments); + } + }); + + this.clearSelections(); + }, + + clearCards: function(ids) { + // remove submitted cards game's card array and clear the board + var self = this; + this.selected = []; + this.$board.empty(); + var cardIds = $.map(self.cards, function(card) { return card.id; }); + $.each(ids, function(idx, id) { + var location = cardIds.indexOf(id); + if (location > -1) { + cardIds.splice(location, 1); + self.cards.splice(location, 1); + } + }); + }, + + updateCards: function(newCards) { + this.cards = this.cards.concat(newCards); + this.displayCards(); + }, + + increaseScore: function() { + this.$score.html(++this.score); + }, + + startRound: function() { + // todo + // reset timer to 30 seconds + }, + + gameWon: function() { + alert("you won!"); + }, + + gameLost: function() { + alert("you lost :("); + } + +}; + +$(document).ready(Game.deal()); \ No newline at end of file diff --git a/HyperSet/set.php b/HyperSet/set.php new file mode 100644 index 0000000..592d3c0 --- /dev/null +++ b/HyperSet/set.php @@ -0,0 +1,18 @@ +start()); +} else if (isset($_GET['action']) && $_GET['action'] == 'submit'){ + $deck = $_SESSION['deck']; + echo json_encode($deck->threeMore()); +} \ No newline at end of file