Ad Code

Save hangman game by flutter

 Save hangman game by flutter framework


Game's video clip:



Free source code:


main.dart

import 'package:flutter/material.dart';

import 'home_page.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);

@override
Widget build(BuildContext context) {
return const MaterialApp(
debugShowCheckedModeBanner: false,
home: HomePage(),
);
}
}

home_page.dart

import 'dart:async';
import 'dart:math';

import 'package:flutter/material.dart';
import 'package:english_words/english_words.dart';
import 'package:google_fonts/google_fonts.dart';

class HomePage extends StatefulWidget {
const HomePage({Key? key}) : super(key: key);

@override
State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
//google fonts
static var myNewFontWhite = GoogleFonts.pressStart2p(
textStyle: const TextStyle(letterSpacing: 2, color: Colors.white));

static var myNewFont = GoogleFonts.pressStart2p(
textStyle: const TextStyle(color: Colors.white));

static var myNewFont2 = GoogleFonts.pressStart2p(
textStyle: const TextStyle(letterSpacing: 2, fontSize: 15, color: Colors.white));

List<String> letter = [];
static List<String> storeLetter = [];
static List<String> storeLetterForShowing = [];
var matchingWord = 0;
var showRandomWord = 0;
var hangNumber = 1;
var stillLife = 6;
var score = 0;
bool gameIsOver = false;

List<String> randWord = [];

List<String> letters = [
'q',
'w',
'e',
'r',
't',
'y',
'u',
'i',
'o',
'p',
'',
'a',
's',
'd',
'f',
'g',
'h',
'j',
'k',
'',
'',
'l',
'z',
'x',
'c',
'v',
'b',
'n',
'm',
'',
];

@override
void initState() {
generateWords();
timer();
super.initState();
}

void timer() {
Timer.periodic(const Duration(milliseconds: 10), (timer) {
storeLetterForShowing.shuffle();
timer.cancel();
});
}

void generateWords() {
nouns.take(1000).forEach((element) {
if (element.length == 7) {
randWord.add(element.toString());
}
});

int totalWord = 0;
for (int i = 0; i < 7; i++) {
int rand = Random().nextInt(randWord.length);
totalWord++;
if (totalWord < 7) {
guessWord(rand);
}
}
print(storeLetter.first);
}

void guessWord(int rand) {
setState(() {
storeLetter.add(randWord.elementAt(rand));
storeLetterForShowing.add(randWord.elementAt(rand));
});
}

void setLetter(String l) {
setState(() {
if (hangNumber == 6) {
gameIsOver = true;
hangNumber = 0;
showDiaLogAlert('Sorry! man');
}

if (matchingWord == 6) {
showDiaLogAlert('Thanks God, Saved!!');
}

if (letter.length < 8 &&
l.toString() == storeLetter.first.split('').elementAt(matchingWord) &&
storeLetter.first.contains(l.toString())) {
letter.add(l.toString());
matchingWord++;
score++;
} else {
hangNumber++;
stillLife--;
}
});
}

void allVariable() {
setState(() {
letter = [];
storeLetter = [];
storeLetterForShowing = [];
matchingWord = 0;
showRandomWord = 0;
hangNumber = 1;
stillLife = 6;
score = 0;
gameIsOver = false;

generateWords();
timer();
});
}

void gameOver() {
allVariable();
Navigator.of(context).pop();
}

void againPlay() {
allVariable();
Navigator.of(context).pop();
}

showDiaLogAlert(String txt) {
return showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text(txt),
content: const Text('Play again'),
actions: [
ElevatedButton(
onPressed: () {
gameOver();
},
child: const Text('No')),
ElevatedButton(
onPressed: () {
againPlay();
},
child: const Text('Yes')),
],
);
});
}

@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.grey[800],
body: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Padding(
padding: const EdgeInsets.only(top: 30.0, right: 10),
child: Center(
child: Text(
'lives $stillLife',
style: myNewFont,
)),
),
Padding(
padding: const EdgeInsets.only(top: 30.0, right: 20),
child: Center(
child: Text(
'| Score $score',
style: myNewFont,
)),
),
],
),
Expanded(
flex: 3,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Center(
child: Image.asset(
'assets/images/h$hangNumber.png',
color: Colors.white,
fit: BoxFit.cover,
),
),
],
)),
Expanded(
child: GridView.builder(
itemCount: letter.length,
physics: const NeverScrollableScrollPhysics(),
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 7,
),
itemBuilder: (_, int index) {
return Center(
child: letter.isEmpty
? const Text('_')
: Text(
letter[index],
style: myNewFont2,
),
);
}),
),
Expanded(
child: GridView.builder(
itemCount: storeLetterForShowing.length,
physics: const NeverScrollableScrollPhysics(),
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 6,
),
itemBuilder: (_, int index) {
return Center(
child: storeLetterForShowing.isNotEmpty
? Text(
'${storeLetterForShowing.elementAt(index).substring(0, 3)}..',
style: myNewFont,
)
: const Text(''),
);
})),
Expanded(
flex: 2,
child: GridView.builder(
itemCount: 30,
physics: const NeverScrollableScrollPhysics(),
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 10),
itemBuilder: (BuildContext context, int index) {
return Padding(
padding: const EdgeInsets.all(2.0),
child: GestureDetector(
onTap: () {
setState(() {
setLetter(letters[index]);
});
},
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(5),
color: Colors.grey[700]),
child: Center(
child: Text(
letters[index].toUpperCase().toString(),
style: myNewFontWhite,
)),
),
),
);
})),
],
),
);
}
}

Post a Comment

0 Comments