Merge branch 'develop' into feature/3-100-point-rules
# Conflicts: # pubspec.yaml
3
.github/workflows/flutter.yml
vendored
@@ -65,6 +65,8 @@ jobs:
|
||||
|
||||
test:
|
||||
runs-on: macos-latest
|
||||
if: always()
|
||||
needs: [lint, format]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
@@ -82,6 +84,7 @@ jobs:
|
||||
build:
|
||||
runs-on: macos-latest
|
||||
if: false # skips job
|
||||
needs: [lint, format, test]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
78
README.md
@@ -8,7 +8,81 @@
|
||||

|
||||

|
||||
|
||||
Mobile app for the card game CABO.
|
||||
A mobile score tracker for the card game Cabo, helping players effortlessly manage scores and automatically calculate round results.
|
||||
|
||||
`// todo`
|
||||
## 📱 Description
|
||||
|
||||
Cabo Counter is an intuitive Flutter-based mobile application designed to enhance your CABO card game experience. It eliminates manual scorekeeping by automatically calculating points per round.
|
||||
|
||||
## ✨ Features
|
||||
|
||||
- 🆕 Create new games with customizable rules
|
||||
- 👥 Support for 2-5 players
|
||||
- ⚖️ Two game modes:
|
||||
- **100 Points Mode** (Standard)
|
||||
- **Infinite Mode** (Casual play)
|
||||
- 🔢 Automatic score calculation with:
|
||||
- Kamikaze rule handling
|
||||
- Exact 100-point bonus (score halving)
|
||||
- 📊 Round history tracking
|
||||
|
||||
## 🚀 Getting Started
|
||||
|
||||
### Prerequisites
|
||||
- Flutter 3.24.5+
|
||||
- Dart 3.5.4+
|
||||
|
||||
### Installation
|
||||
|
||||
```bash
|
||||
git clone https://github.com/flixcoo/Cabo-Counter.git
|
||||
cd Cabo-Counter
|
||||
flutter pub get
|
||||
flutter run
|
||||
```
|
||||
|
||||
## 🎮 Usage
|
||||
|
||||
1. **Start New Game**
|
||||
- Choose game mode (100 Points or Infinite)
|
||||
- Add 2-5 players
|
||||
|
||||
2. **Gameplay**
|
||||
- Track rounds with automatic scoring
|
||||
- Handle special rules (Kamikaze, exact 100 points)
|
||||
- View real-time standings
|
||||
|
||||
3. **Round Management**
|
||||
- Automatic winner detection
|
||||
- Penalty point calculation
|
||||
- Game-over detection (100 Points mode)
|
||||
|
||||
## 🃏 Key Rules Overview
|
||||
|
||||
### Scoring System
|
||||
- Round winner: 0 points
|
||||
- Other players: Sum of card values
|
||||
- Failed Cabo call: +5 penalty points
|
||||
- Kamikaze: 0 points for caller, 50 for others
|
||||
- Exact 100 points: Score halved
|
||||
|
||||
### Game End
|
||||
- First player ≥101 points triggers final scoring
|
||||
- Lowest total score wins
|
||||
|
||||
## 🤝 Contributing
|
||||
|
||||
Contributions are welcome! If you'd like to improve Cabo Counter, please:
|
||||
- Follow the existing code style and architecture
|
||||
- Maintain clean, well-documented code
|
||||
- Keep changes focused and test your work
|
||||
|
||||
Feel free to open issues or submit pull requests!
|
||||
|
||||
## ⚠️ Disclaimer
|
||||
|
||||
This project is not affiliated with or endorsed by Smiling Monster GmbH. CABO is a registered trademark of its respective owners. This app is designed for scorekeeping purposes only and does not include actual game components.
|
||||
|
||||
---
|
||||
|
||||
> 🚀 Powered by Flutter | Developed with 🩵
|
||||
|
||||
|
Before Width: | Height: | Size: 264 KiB After Width: | Height: | Size: 350 KiB |
@@ -476,7 +476,7 @@
|
||||
DEVELOPMENT_TEAM = RJB4MM6RVS;
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = "CABO Counter";
|
||||
INFOPLIST_KEY_CFBundleDisplayName = "Cabo Counter";
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 18.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
@@ -484,11 +484,16 @@
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.flixco.caboCounterApp;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.flixcoo.caboCounter;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = 1;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
};
|
||||
name = Profile;
|
||||
@@ -668,7 +673,7 @@
|
||||
DEVELOPMENT_TEAM = RJB4MM6RVS;
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = "CABO Counter";
|
||||
INFOPLIST_KEY_CFBundleDisplayName = "Cabo Counter";
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 18.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
@@ -676,12 +681,17 @@
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.flixco.caboCounterApp;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.flixcoo.caboCounter;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = 1;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
};
|
||||
name = Debug;
|
||||
@@ -698,7 +708,7 @@
|
||||
DEVELOPMENT_TEAM = RJB4MM6RVS;
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = "CABO Counter";
|
||||
INFOPLIST_KEY_CFBundleDisplayName = "Cabo Counter";
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 18.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
@@ -706,11 +716,16 @@
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.flixco.caboCounterApp;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.flixcoo.caboCounter;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = 1;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
};
|
||||
name = Release;
|
||||
|
||||
|
Before Width: | Height: | Size: 264 KiB After Width: | Height: | Size: 350 KiB |
|
Before Width: | Height: | Size: 264 KiB After Width: | Height: | Size: 350 KiB |
|
Before Width: | Height: | Size: 264 KiB After Width: | Height: | Size: 350 KiB |
@@ -7,7 +7,7 @@
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>CABO-Counter</string>
|
||||
<string>Cabo Counter</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
@@ -24,6 +24,12 @@
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(FLUTTER_BUILD_NUMBER)</string>
|
||||
<key>LSApplicationQueriesSchemes</key>
|
||||
<array>
|
||||
<string>https</string>
|
||||
<string>http</string>
|
||||
<string>instagram</string>
|
||||
</array>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>UIApplicationSupportsIndirectInputEvents</key>
|
||||
@@ -32,14 +38,10 @@
|
||||
<string>LaunchScreen</string>
|
||||
<key>UIMainStoryboardFile</key>
|
||||
<string>Main</string>
|
||||
<key>UIStatusBarHidden</key>
|
||||
<false/>
|
||||
<key>UIStatusBarStyle</key>
|
||||
<string>UIStatusBarStyleDarkContent</string>
|
||||
<key>LSApplicationQueriesSchemes</key>
|
||||
<array>
|
||||
<string>https</string>
|
||||
<string>http</string>
|
||||
<string>instagram</string>
|
||||
</array>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
|
||||
@@ -21,7 +21,7 @@ class App extends StatelessWidget {
|
||||
),
|
||||
),
|
||||
debugShowCheckedModeBanner: false,
|
||||
title: 'CABO-Counter',
|
||||
title: 'Cabo Counter',
|
||||
home: const MainMenuView(),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
name: cabo_counter
|
||||
description: "Mobile app for the card game CABO"
|
||||
description: "Mobile app for the card game Cabo"
|
||||
publish_to: 'none'
|
||||
|
||||
version: 0.1.3+63
|
||||
|
||||