Skip to content

Instantly share code, notes, and snippets.

@theindianappguy
Last active March 12, 2020 13:22
Show Gist options
  • Save theindianappguy/482dbd401031ab9f74b0fa3de705ad2f to your computer and use it in GitHub Desktop.
Save theindianappguy/482dbd401031ab9f74b0fa3de705ad2f to your computer and use it in GitHub Desktop.
Memory Game - DartPad
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Home(),
);
}
}
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
List<TileModel> gridViewTiles = new List<TileModel>();
List<TileModel> questionPairs = new List<TileModel>();
bool letsPlay = false;
int noOfQuestion = 0;
@override
void initState() {
super.initState();
}
void reStart() {
myPairs = getPairs(gameLevel);
print("gameLevel : $gameLevel");
myPairs.shuffle();
gridViewTiles = myPairs;
if(gameLevel == "easy"){
noOfQuestion = 5;
}else if(gameLevel == "medium"){
noOfQuestion = 8;
}else if(gameLevel == "hard"){
noOfQuestion = 12;
}
Future.delayed(const Duration(seconds: 5), () {
// Here you can write your code
setState(() {
// Here you can write your code for open new view
questionPairs = getQuestionPairs(gameLevel);
gridViewTiles = questionPairs;
selected = false;
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: letsPlay
? SingleChildScrollView(
child: Container(
padding: EdgeInsets.symmetric(horizontal: 20, vertical: 50),
child: Column(
children: <Widget>[
SizedBox(
height: 40,
),
points != 100*noOfQuestion
? Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Text(
"$points/${100*noOfQuestion}",
style: TextStyle(
fontSize: 20, fontWeight: FontWeight.w500),
),
Text(
"Points",
textAlign: TextAlign.start,
style: TextStyle(
fontSize: 14, fontWeight: FontWeight.w300),
),
],
)
: Container(),
SizedBox(
height: 20,
),
points != 100*noOfQuestion
? GridView(
shrinkWrap: true,
//physics: ClampingScrollPhysics(),
scrollDirection: Axis.vertical,
gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
mainAxisSpacing: 0.0,
maxCrossAxisExtent: 125),
children: List.generate(gridViewTiles.length, (index) {
return Tile(
imagePathUrl: gridViewTiles[index].getImageAssetUrl(),
tileIndex: index,
parent: this,
);
}),
): Center(
child: GestureDetector(
onTap: (){
letsPlay = false;
reStart();
setState(() {
points = 0;
});
},
child: Column(children: <Widget>[
Text("🎉", style: TextStyle(fontSize: 80),),
SizedBox(height: 20,),
Container(
height: 50,
width: 200,
alignment: Alignment.center,
decoration: BoxDecoration(
color: Colors.blue,
borderRadius: BorderRadius.circular(24),
),
child: Text(
"Replay",
style: TextStyle(
color: Colors.white,
fontSize: 17,
fontWeight: FontWeight.w500),
),
),
],)
),
)
],
),
),
)
: Container(
width: MediaQuery.of(context).size.width,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Image.network("https://firebasestorage.googleapis.com/v0/b/memorygame-ac82a.appspot.com/o/JUST%20MATCH.png?alt=media&token=5ba2f090-fb16-47e5-9206-2b3e23367300"
,height: 200,),
SizedBox(height: 30,),
GestureDetector(
onTap: () {
gameLevel = "easy";
setState(() {
letsPlay = true;
});
reStart();
},
child: Container(
height: 50,
width: 200,
alignment: Alignment.center,
decoration: BoxDecoration(
border: Border.all(color: Colors.blue, width: 2),
borderRadius: BorderRadius.circular(24),
),
child: Text(
"Easy",
style: TextStyle(
color: Colors.blue,
fontSize: 17,
fontWeight: FontWeight.w500),
),
),
),
SizedBox(
height: 20,
),
GestureDetector(
onTap: () {
gameLevel = "medium";
setState(() {
letsPlay = true;
});
reStart();
},
child: Container(
height: 50,
width: 200,
alignment: Alignment.center,
decoration: BoxDecoration(
border: Border.all(color: Colors.blue, width: 2),
borderRadius: BorderRadius.circular(24),
),
child: Text(
"Medium",
style: TextStyle(
color: Colors.blue,
fontSize: 17,
fontWeight: FontWeight.w500),
),
),
),
SizedBox(
height: 20,
),
GestureDetector(
onTap: () {
gameLevel = "hard";
setState(() {
letsPlay = true;
});
reStart();
},
child: Container(
height: 50,
width: 200,
alignment: Alignment.center,
decoration: BoxDecoration(
border: Border.all(color: Colors.blue, width: 2),
borderRadius: BorderRadius.circular(24),
),
child: Text(
"Hard",
style: TextStyle(
color: Colors.blue,
fontSize: 17,
fontWeight: FontWeight.w500),
),
),
),
],
),
),
bottomSheet: Container(
color: Colors.white,
padding: EdgeInsets.symmetric(vertical: 14),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text("Made with"),
SizedBox(width: 8,),
Image.network(
"https://firebasestorage.googleapis.com/v0/b/memorygame-ac82a.appspot.com/o/heart.png?alt=media&token=f13adce1-a0ba-41e7-97de-5da70590aad2"
, width: 20,height: 20,),
SizedBox(width: 8,),
Text("by Sanskar Vinod Tiwari")
],
),
),
);
}
}
class Tile extends StatefulWidget {
final String imagePathUrl;
final int tileIndex;
final _HomeState parent;
Tile({this.imagePathUrl, this.tileIndex, this.parent});
@override
_TileState createState() => _TileState();
}
class _TileState extends State<Tile> {
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
if (!selected) {
setState(() {
myPairs[widget.tileIndex].setIsSelected(true);
});
if (selectedTile != "") {
/// testing if the selected tiles are same
if (selectedTile == myPairs[widget.tileIndex].getImageAssetUrl()) {
print("add point");
points = points + 100;
print(selectedTile + " thishis" + widget.imagePathUrl);
TileModel tileModel = new TileModel();
print(widget.tileIndex);
selected = true;
Future.delayed(const Duration(seconds: 2), () {
tileModel.setImageAssetUrl("");
myPairs[widget.tileIndex] = tileModel;
print(selectedIndex);
myPairs[selectedIndex] = tileModel;
this.widget.parent.setState(() {});
setState(() {
selected = false;
});
selectedTile = "";
});
} else {
print(selectedTile +
" thishis " +
myPairs[widget.tileIndex].getImageAssetUrl());
print("wrong choice");
print(widget.tileIndex);
print(selectedIndex);
selected = true;
Future.delayed(const Duration(seconds: 2), () {
this.widget.parent.setState(() {
myPairs[widget.tileIndex].setIsSelected(false);
myPairs[selectedIndex].setIsSelected(false);
});
setState(() {
selected = false;
});
});
selectedTile = "";
}
} else {
setState(() {
selectedTile = myPairs[widget.tileIndex].getImageAssetUrl();
selectedIndex = widget.tileIndex;
});
print(selectedTile);
print(selectedIndex);
}
}
},
child: Container(
margin: EdgeInsets.all(5),
child: myPairs[widget.tileIndex].getImageAssetUrl() != ""
? Image.network(myPairs[widget.tileIndex].getIsSelected()
? myPairs[widget.tileIndex].getImageAssetUrl()
: widget.imagePathUrl)
: Container(
color: Colors.white,
child: Image.network(
"https://firebasestorage.googleapis.com/v0/b/memorygame-ac82a.appspot.com/o/correct.png?alt=media&token=b4e8b52e-2d5a-4d02-8cbb-92f7770ac10d"),
),
),
);
}
}
// this is model
class TileModel {
String imageAssetUrl;
bool isSelected;
TileModel({this.imageAssetUrl, this.isSelected});
void setImageAssetUrl(String getImageAssetPath) {
imageAssetUrl = getImageAssetPath;
}
String getImageAssetUrl() {
return imageAssetUrl;
}
void setIsSelected(bool getIsSelected) {
isSelected = getIsSelected;
}
bool getIsSelected() {
return isSelected;
}
}
// this is data
String selectedTile = "";
int selectedIndex;
bool selected = true;
int points = 0;
String gameLevel = "easy";
List<TileModel> myPairs = new List<TileModel>();
List<bool> clicked = new List<bool>();
List<bool> getClicked() {
List<bool> yoClicked = new List<bool>();
List<TileModel> myairs = new List<TileModel>();
myairs = getPairs(gameLevel);
for (int i = 0; i < myairs.length; i++) {
yoClicked[i] = false;
}
return yoClicked;
}
List<TileModel> getPairs(String gameLevel) {
List<TileModel> pairs = new List<TileModel>();
TileModel tileModel = new TileModel();
if (gameLevel == "easy") {
//1
tileModel.setImageAssetUrl(
"https://firebasestorage.googleapis.com/v0/b/memorygame-ac82a.appspot.com/o/fox.png?alt=media&token=12dfcb39-b687-4425-833b-6a91f6c69c52");
tileModel.setIsSelected(false);
pairs.add(tileModel);
pairs.add(tileModel);
tileModel = new TileModel();
//2
tileModel.setImageAssetUrl(
"https://firebasestorage.googleapis.com/v0/b/memorygame-ac82a.appspot.com/o/hippo.png?alt=media&token=c519b471-b010-4eb2-acb7-f44a849168aa");
tileModel.setIsSelected(false);
pairs.add(tileModel);
pairs.add(tileModel);
tileModel = new TileModel();
//3
tileModel.setImageAssetUrl(
"https://firebasestorage.googleapis.com/v0/b/memorygame-ac82a.appspot.com/o/horse.png?alt=media&token=2c913509-f20a-4c7d-9faf-d76c73a4d1b7");
tileModel.setIsSelected(false);
pairs.add(tileModel);
pairs.add(tileModel);
tileModel = new TileModel();
//4
tileModel.setImageAssetUrl(
"https://firebasestorage.googleapis.com/v0/b/memorygame-ac82a.appspot.com/o/monkey.png?alt=media&token=c538dd5e-d6f9-4324-b85e-65db233bf003");
tileModel.setIsSelected(false);
pairs.add(tileModel);
pairs.add(tileModel);
tileModel = new TileModel();
//5
tileModel.setImageAssetUrl(
"https://firebasestorage.googleapis.com/v0/b/memorygame-ac82a.appspot.com/o/panda.png?alt=media&token=19623441-f1cf-4459-b81c-da9fbceefaa8");
tileModel.setIsSelected(false);
pairs.add(tileModel);
pairs.add(tileModel);
tileModel = new TileModel();
}
if (gameLevel == "medium") {
//1
tileModel.setImageAssetUrl(
"https://firebasestorage.googleapis.com/v0/b/memorygame-ac82a.appspot.com/o/fox.png?alt=media&token=12dfcb39-b687-4425-833b-6a91f6c69c52");
tileModel.setIsSelected(false);
pairs.add(tileModel);
pairs.add(tileModel);
tileModel = new TileModel();
//2
tileModel.setImageAssetUrl(
"https://firebasestorage.googleapis.com/v0/b/memorygame-ac82a.appspot.com/o/hippo.png?alt=media&token=c519b471-b010-4eb2-acb7-f44a849168aa");
tileModel.setIsSelected(false);
pairs.add(tileModel);
pairs.add(tileModel);
tileModel = new TileModel();
//3
tileModel.setImageAssetUrl(
"https://firebasestorage.googleapis.com/v0/b/memorygame-ac82a.appspot.com/o/horse.png?alt=media&token=2c913509-f20a-4c7d-9faf-d76c73a4d1b7");
tileModel.setIsSelected(false);
pairs.add(tileModel);
pairs.add(tileModel);
tileModel = new TileModel();
//4
tileModel.setImageAssetUrl(
"https://firebasestorage.googleapis.com/v0/b/memorygame-ac82a.appspot.com/o/monkey.png?alt=media&token=c538dd5e-d6f9-4324-b85e-65db233bf003");
tileModel.setIsSelected(false);
pairs.add(tileModel);
pairs.add(tileModel);
tileModel = new TileModel();
//5
tileModel.setImageAssetUrl(
"https://firebasestorage.googleapis.com/v0/b/memorygame-ac82a.appspot.com/o/panda.png?alt=media&token=19623441-f1cf-4459-b81c-da9fbceefaa8");
tileModel.setIsSelected(false);
pairs.add(tileModel);
pairs.add(tileModel);
tileModel = new TileModel();
//6
tileModel.setImageAssetUrl(
"https://firebasestorage.googleapis.com/v0/b/memorygame-ac82a.appspot.com/o/parrot.png?alt=media&token=c89937a1-310a-4d89-82e6-cbe9aea9b11a");
tileModel.setIsSelected(false);
pairs.add(tileModel);
pairs.add(tileModel);
tileModel = new TileModel();
//7
tileModel.setImageAssetUrl(
"https://firebasestorage.googleapis.com/v0/b/memorygame-ac82a.appspot.com/o/rabbit.png?alt=media&token=d495d12f-0cc8-4d11-a5a2-38b9c20e5525");
tileModel.setIsSelected(false);
pairs.add(tileModel);
pairs.add(tileModel);
tileModel = new TileModel();
//8
tileModel.setImageAssetUrl(
"https://firebasestorage.googleapis.com/v0/b/memorygame-ac82a.appspot.com/o/zoo.png?alt=media&token=9a99342d-0327-4f4e-a127-7cdbcfc8dcf8");
tileModel.setIsSelected(false);
pairs.add(tileModel);
pairs.add(tileModel);
tileModel = new TileModel();
}
if (gameLevel == "hard") {
//1
tileModel.setImageAssetUrl(
"https://firebasestorage.googleapis.com/v0/b/memorygame-ac82a.appspot.com/o/fox.png?alt=media&token=12dfcb39-b687-4425-833b-6a91f6c69c52");
tileModel.setIsSelected(false);
pairs.add(tileModel);
pairs.add(tileModel);
tileModel = new TileModel();
//2
tileModel.setImageAssetUrl(
"https://firebasestorage.googleapis.com/v0/b/memorygame-ac82a.appspot.com/o/hippo.png?alt=media&token=c519b471-b010-4eb2-acb7-f44a849168aa");
tileModel.setIsSelected(false);
pairs.add(tileModel);
pairs.add(tileModel);
tileModel = new TileModel();
//3
tileModel.setImageAssetUrl(
"https://firebasestorage.googleapis.com/v0/b/memorygame-ac82a.appspot.com/o/horse.png?alt=media&token=2c913509-f20a-4c7d-9faf-d76c73a4d1b7");
tileModel.setIsSelected(false);
pairs.add(tileModel);
pairs.add(tileModel);
tileModel = new TileModel();
//4
tileModel.setImageAssetUrl(
"https://firebasestorage.googleapis.com/v0/b/memorygame-ac82a.appspot.com/o/monkey.png?alt=media&token=c538dd5e-d6f9-4324-b85e-65db233bf003");
tileModel.setIsSelected(false);
pairs.add(tileModel);
pairs.add(tileModel);
tileModel = new TileModel();
//5
tileModel.setImageAssetUrl(
"https://firebasestorage.googleapis.com/v0/b/memorygame-ac82a.appspot.com/o/panda.png?alt=media&token=19623441-f1cf-4459-b81c-da9fbceefaa8");
tileModel.setIsSelected(false);
pairs.add(tileModel);
pairs.add(tileModel);
tileModel = new TileModel();
//6
tileModel.setImageAssetUrl(
"https://firebasestorage.googleapis.com/v0/b/memorygame-ac82a.appspot.com/o/parrot.png?alt=media&token=c89937a1-310a-4d89-82e6-cbe9aea9b11a");
tileModel.setIsSelected(false);
pairs.add(tileModel);
pairs.add(tileModel);
tileModel = new TileModel();
//7
tileModel.setImageAssetUrl(
"https://firebasestorage.googleapis.com/v0/b/memorygame-ac82a.appspot.com/o/rabbit.png?alt=media&token=d495d12f-0cc8-4d11-a5a2-38b9c20e5525");
tileModel.setIsSelected(false);
pairs.add(tileModel);
pairs.add(tileModel);
tileModel = new TileModel();
//8
tileModel.setImageAssetUrl(
"https://firebasestorage.googleapis.com/v0/b/memorygame-ac82a.appspot.com/o/zoo.png?alt=media&token=9a99342d-0327-4f4e-a127-7cdbcfc8dcf8");
tileModel.setIsSelected(false);
pairs.add(tileModel);
pairs.add(tileModel);
tileModel = new TileModel();
//9
tileModel.setImageAssetUrl(
"https://firebasestorage.googleapis.com/v0/b/memorygame-ac82a.appspot.com/o/penguin.png?alt=media&token=1b5ce49e-2290-4ceb-b11e-283dd3427e3b");
tileModel.setIsSelected(false);
pairs.add(tileModel);
pairs.add(tileModel);
tileModel = new TileModel();
//10
tileModel.setImageAssetUrl(
"https://firebasestorage.googleapis.com/v0/b/memorygame-ac82a.appspot.com/o/bird.png?alt=media&token=7a5d9982-6439-49ce-8904-d21ae1b13050");
tileModel.setIsSelected(false);
pairs.add(tileModel);
pairs.add(tileModel);
tileModel = new TileModel();
//11
tileModel.setImageAssetUrl(
"https://firebasestorage.googleapis.com/v0/b/memorygame-ac82a.appspot.com/o/bear.png?alt=media&token=7b2ac43c-491e-4705-b20f-f65d8f5204fb");
tileModel.setIsSelected(false);
pairs.add(tileModel);
pairs.add(tileModel);
tileModel = new TileModel();
//12
tileModel.setImageAssetUrl(
"https://firebasestorage.googleapis.com/v0/b/memorygame-ac82a.appspot.com/o/lion.png?alt=media&token=5c434a67-d17e-4245-b3df-3391f7b7102c");
tileModel.setIsSelected(false);
pairs.add(tileModel);
pairs.add(tileModel);
tileModel = new TileModel();
}
return pairs;
}
List<TileModel> getQuestionPairs(String gameLevel) {
List<TileModel> pairs = new List<TileModel>();
TileModel tileModel = new TileModel();
int noOfQuestion;
if (gameLevel == "easy") {
noOfQuestion = 5;
} else if (gameLevel == "medium") {
noOfQuestion = 8;
} else if (gameLevel == "hard") {
noOfQuestion = 12;
}
for (int i = 0; i < noOfQuestion * 2; i++) {
tileModel.setImageAssetUrl(
"https://firebasestorage.googleapis.com/v0/b/memorygame-ac82a.appspot.com/o/question.png?alt=media&token=f577fdc7-f8c7-4954-a58b-7d2bb80c8d2a");
tileModel.setIsSelected(false);
pairs.add(tileModel);
tileModel = new TileModel();
}
return pairs;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment